【问题标题】:Get week number with week starting from sunday获取从星期日开始的星期数
【发布时间】:2018-02-05 05:01:37
【问题描述】:

我目前有这个代码,我可以通过添加和减去按钮在该周的开始/结束日期旁边获得周数:

Date.prototype.getWeekNumber = function() {
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
  return Math.ceil((((d - yearStart) / 86400000) + 1) / 7);
};

var curr;
weekReset();

function display() {
  start.textContent = curr;
  end.textContent = endOfWeek(curr);
  week.textContent = ("Week " + curr.getWeekNumber());
}

function weekReset() {
  curr = startOfWeek(new Date());
  display();
}

function startOfWeek(date) {
  var start = new Date(date);
  start.setHours(0, 0, 0, 0);
  start.setDate(start.getDate() - start.getDay());
  return start;
}

function endOfWeek(date) {
  date = startOfWeek(date);
  date.setDate(date.getDate() + 6);
  return date;
}

function weekPlus(weeks) {
  curr.setDate(curr.getDate() + 7 * weeks);
  display();
}
<div id="start">start</div>
<div id="end">end</div>
<div id="week">week</div>
<button onclick="weekReset()">current</button>
<button onclick="weekPlus(1)">add</button>
<button onclick="weekPlus(-1)">substract</button>

问题是当前周数显示为 34;

8 月 27 日星期日开始

结束于9 月 2 日星期六

...这应该是周数 35

那么如何更改此功能以将星期日作为一周的第一天,将星期六作为一周的最后一天?

感谢任何帮助。

【问题讨论】:

    标签: javascript jquery function date time


    【解决方案1】:

    您的问题在这里:

    var dayNum = d.getUTCDay() || 7;
    d.setUTCDate(d.getUTCDate() + 4 - dayNum);
    

    该代码适用于 ISO 周,将星期日的天数调整为 7 并将日期设置为星期四,其中星期是星期一到星期日。

    您想要星期天到星期六,并且想要星期天,所以使用:

    var dayNum = d.getUTCDay();
    d.setUTCDate(d.getUTCDate() - dayNum);
    

    可以简化为:

    d.setUTCDate(d.getUTCDate() - d.getUTCDay());
    

     Date.prototype.getWeekNumber = 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);
        };
        
    var c = new Date(2017,7,26);
    console.log(c.getWeekNumber() + ':' + c.toString());
    var d = new Date(2017,7,27);
    console.log(d.getWeekNumber() + ':' + d.toString());

    【讨论】:

    • 如果我输入 2018-01-01,这将给出 53 作为答案。这是不正确的@RobG
    • @tharindu——你对 ISO 周是正确的,但 OP 想要基于星期日的周数,而不是 ISO 的星期四。 2018 年 1 月 1 日是从 2017 年 12 月 31 日星期日开始的一周中的一个星期一。因此,根据 OP 的要求,它是在 2017 年的第 53 周。PS。我已经回答了一个 ISO 周数答案 here
    【解决方案2】:

    您的代码d.setUTCDate(d.getUTCDate() + 4 - dayNum); 将您的日期设置回三天前。我认为这就是您获得前一周数字的原因。我检查了删除代码,它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-09
      • 2017-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 2020-07-02
      • 1970-01-01
      相关资源
      最近更新 更多