鍍金池/ 問(wèn)答/HTML/ JS獲取當(dāng)前周從星期一到星期天的日期

JS獲取當(dāng)前周從星期一到星期天的日期

需求:根據(jù)當(dāng)天日期,獲得所在周的所有日期,比如今天(2018-01-21)那么這一周的日期是:
['2018-01-15',...'2018-01-21'],要支持跨年,跨月。
注:星期一為一周的開(kāi)始,星期天為結(jié)束

我現(xiàn)在寫(xiě)的這個(gè)方法,遇到星期日時(shí)返回的就錯(cuò)了。變成下周的了。求大神給個(gè)方法。

回答
編輯回答
安淺陌

function getDates(currentTime) {//JS獲取當(dāng)前周從星期一到星期天的日期

    var currentDate = new Date(currentTime)
    var timesStamp = currentDate.getTime();
    var currenDay = currentDate.getDay();
    var dates = [];
    for (var i = 0; i < 7; i++) {
        dates.push(new Date(timesStamp + 24 * 60 * 60 * 1000 * (i - (currenDay + 6) % 7)).toLocaleDateString().replace(/\//g, '-'));
    }
    return dates
}
2018年2月21日 09:30
編輯回答
瘋浪

供參考

const dateOfToday = Date.now()
const dayOfToday = (new Date().getDay() + 7 - 1) % 7
const daysOfThisWeek = Array.from(new Array(7))
  .map((_, i) => {
    const date = new Date(dateOfToday + (i - dayOfToday) * 1000 * 60 * 60 * 24)
    return date.getFullYear() +
      '-' +
      String(date.getMonth() + 1).padStart(2, '0') +
      '-' +
      String(date.getDate()).padStart(2, '0')
  })
2018年2月25日 11:13
編輯回答
硬扛
function getWeekDay(dateString) {
    let dateStringReg = /^\d{4}[/-]\d{1,2}[/-]\d{1,2}$/;

    if (dateString.match(dateStringReg)) {
        let presentDate = new Date(dateString),
            today = presentDate.getDay() !== 0 ? presentDate.getDay() : 7;

        return Array.from(new Array(7), function(val, index) {
            return formatDate(new Date(presentDate.getTime() - (today - index-1) * 24 * 60 * 60 * 1000));
        });

    } else {
        throw new Error('dateString should be like "yyyy-mm-dd" or "yyyy/mm/dd"');
    }

    function formatDate(date) {
        return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
    }
}

console.log(getWeekDay('2018-1-8'));
2018年5月8日 07:51