咱們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。javascript
咱們這裏來獲取今天所在星期的始末日期,咱們能夠經過(new Date).getDay()
來獲取今天是星期幾,而後再經過這個減去或者加上必定的天數,就是這個星期的開始日期和結束日期。html
function getWeekStartAndEnd() { const oneDayTime = 1000 * 60 * 60 * 24; // 一天裏一共的毫秒數 const today = new Date(); const todayDay = today.getDay(); // 獲取今天是星期幾,假設是周3 const startDate = new Date( today.getTime() - oneDayTime * (todayDay - 1) ); const endDate = new Date(today.getTime() + oneDayTime * (7 - todayDay)); return { startDate, endDate }; } const week = getWeekStartAndEnd(); console.log(week.startDate, week.endDate);
是否是很完美?但,這裏有一個很大的 bug!注意:若是今天是週日,那麼todayDay
就會是 0,若仍是按照上面的思路,則星期一的日期會變成下週一的日期,星期日的日期會變成下週日的日期。所以,這裏咱們須要特殊處理下,當 todayDay 爲 0 時,就將其賦值爲 7。同時,咱們還能夠傳入一個時間戳,獲取特定某一天所在的星期。前端
最終的解決方案
function getWeekStartAndEnd(timestamp) { const oneDayTime = 1000 * 60 * 60 * 24; // 一天裏一共的毫秒數 const today = timestamp ? new Date(timestamp) : new Date(); const todayDay = today.getDay() || 7; // 若那一天是週末時,則強制賦值爲7 const startDate = new Date( today.getTime() - oneDayTime * (todayDay - 1) ); const endDate = new Date(today.getTime() + oneDayTime * (7 - todayDay)); return { startDate, endDate }; }
擴展
若是我要輸出今天所在星期,這一週裏全部的日期,該怎麼辦呢?很簡單,先獲取到這一週裏的第一天,而後第一天加上oneDayTime*i
的時間戳,就是第 i 天的日期,或者在前一天的基礎上加上 oneDayTime 也能夠。java
function getAllWeekToday() { const oneDayTime = 1000 * 60 * 60 * 24; const today = new Date(); const todayDay = today.getDay() || 7; // 若那一天是週末時,則強制賦值爲7 const startDate = new Date( today.getTime() - oneDayTime * (todayDay - 1) ); let dateList = [startDate]; for (let i = 1; i < 7; i++) { dateList.push(new Date(startDate.getTime() + oneDayTime * i)); } return dateList; }
歡迎訪問蚊子的前端博客: https://www.xiabingbao.com 歡迎關注蚊子的公衆號: spa
原文出處:https://www.cnblogs.com/xumengxuan/p/11693332.htmlcode