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

咱們會遇到的需求的是,獲取今天或者某一天所在星期的開始和結束日期。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

相關文章
相關標籤/搜索