H5W3
当前位置:H5W3 > JavaScript > 正文

【JS】JS获取当前周从星期一到星期天的日期

需求:根据当天日期,获得所在周的所有日期,比如今天(2018-01-21)那么这一周的日期是:
[‘2018-01-15′,…’2018-01-21’],要支持跨年,跨月。
注:星期一为一周的开始,星期天为结束

我现在写的这个方法,遇到星期日时返回的就错了。变成下周的了。求大神给个方法。

回答

供参考

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')
  })

function getDates(currentTime) {//JS获取当前周从星期一到星期天的日期

    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
}
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'));

本文地址:H5W3 » 【JS】JS获取当前周从星期一到星期天的日期

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址