js日期处理-周数

记录解决获取日期为当年第几周问题,之所以记录周数的运算,而不是月,是因为周存在跨年特性:

通常一年第一周和最后一周都会出现跨年现象。程序在不允许两年出现重叠周的情况下,会约定以周四所在日期的年份为主,即周四的日期为哪一周,则这周归属于哪一年。比如2019-12-30 ~ 2020-1-5 按中国习惯周一为第一天,该日期为19年而周日5号为20年,此时以周四2020-1-2所在年份为主,所以该周应该归属在2020年第一周。

常用方法

// 获取日期所在周为一年第几周 假设每周周一为第一天

function getWeekIndex(d) {

    // 截掉时分秒保留整数天

    var date = new Date((d || new Date()).toLocaleDateString());

    // 设置日期为当前周周四

    date.setDate(date.getDate() + (4 - (date.getDay()||7)));

    var year = date.getFullYear();

    var firstDate = new Date(year, 0, 1);

    firstDate.setDate(firstDate.getDate() + (4 - (firstDate.getDay()||7)));

    // 当年第一天早于周四 第一周延后七天

    if (firstDate.getFullYear() < year) {

        firstDate.setDate(firstDate.getDate() + 7);

    }

    // 计算当前周和第一周之间周数差

    return Math.ceil(((date - firstDate) / 86400000 + 1) / 7 );

}

你可能感兴趣的:(js日期处理-周数)