我有以下代码来获取日期时的星期数
Date.prototype.getWeek = function () {
var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
d.setUTCDate(d.getUTCDate() - d.getUTCDay());
var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
}
当我通过日期2018年1月1日时,在2017年的最后一周是2018年1月1日,则将number设置为53。如何通过将年份从1月1日开始而不是每周的开始日期是星期天吗?
答案 0 :(得分:0)
您可以使用UTC日期值计算自1月1日以来的整周数,以避免夏时制问题。从1月1日之前的1毫秒开始,使用 Math.ceil 表示1月1日是第1周的第一天。
以下是对代码的轻微重构:
// Get week number based on start of 1 Jan
function getWeekNumber(date = new Date()) {
const msPerWeek = 5.828e8;
// Use UTC values to remove timezone issues
let d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
// Set epoch to 1 ms before 1 Jan
let e = new Date(Date.UTC(d.getUTCFullYear(), 0, 0, 23, 59, 59, 999));
// Return week number
return Math.ceil((d - e) / msPerWeek);
}
[new Date(2019,0,1), // Tue 1 Jan, week 1
new Date(2019,0,7), // Mon 7 Jan, week 1
new Date(2019,0,8), // Tue 8 Jan, week 2
new Date(2019,0,15), // Tue 15 Jan, week 3
new Date() // Today
].forEach( date => console.log(date.toDateString() + ': ' + getWeekNumber(date)));