我們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。 我們這裡來獲取今天所在星期的始末日期,我們可以通過 來獲取今天是星期幾,然後再通過這個減去或者加上一定的天數,就是這個星期的開始日期和結束日期。 是不是很完美?但,這裡有一個很大的 bug! 註意:如果今天是周日,那麼 就會是 0, ...
我們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。
我們這裡來獲取今天所在星期的始末日期,我們可以通過(new Date).getDay()
來獲取今天是星期幾,然後再通過這個減去或者加上一定的天數,就是這個星期的開始日期和結束日期。
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 也可以。
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
歡迎關註蚊子的公眾號: