【问题标题】:Getting Week Numbers of a Year where week number is starting from January 1st获取周数从 1 月 1 日开始的一年中的周数
【发布时间】:2019-07-26 01:20:21
【问题描述】:

当我提供日期时,我有以下代码来获取周数

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-01-01 时,weekNumber 的值为 53,因为 2018 年 1 月 1 日位于 2017 年的最后一周。如何通过将年份从 1 月 1 日开始而不是制作来获得周数每周的开始日是星期日?

【问题讨论】:

标签: javascript date week-number


【解决方案1】:

您可以使用 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)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 2016-02-12
    • 2020-12-14
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多