JavaScript:如何獲取某一天所在的星期

我們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。

我們這裏來獲取今天所在星期的始末日期,我們可以通過(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;
}

更多文章可以點擊:蚊子博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章