jQuery UI Datepicker显示不正确的周数

时间:2016-01-21 13:23:46

标签: javascript jquery jquery-ui datepicker

使用jQuery UI Datepicker并在星期日开始一周时,周数不正确。例如,2016年1月3日应该是第1周,因为所有日期(第3天到第9天)都在同一年。但正如您在下面的屏幕截图中看到的那样,UI将其显示为第53周。

enter image description here

以下是呈现datepicker的代码:

$("#datepicker" ).datepicker({
    showWeek: true,
    firstDay: 0
});

所以没有什么特别的,除了显示周数和周日开始周而不是周一(默认情况下)。

这是问题的一个小提琴:https://jsfiddle.net/vLqabmmz/

6 个答案:

答案 0 :(得分:3)

由于这似乎是jQuery UI中的一个错误。我发布了可能的答案,即将此报告为jQuery UI团队的错误:https://bugs.jqueryui.com/ticket/14907#ticket

答案 1 :(得分:1)

我进一步检查了jqueryUI的iso8601Week()方法工作正常,问题在于它的表示(布局)。

如果您提取一周的值,您可以看到遵循标准并且没问题。第3周是第53周,之后是4 ... 7(这是一年中的第一个星期四,这是第1周)。您可以查看以下代码。

  $(function() {
    $( "#datepicker" ).datepicker({
      showWeek: true,
      onSelect: function(dateText, inst) {
            $(this).val("'Week Number '" + $.datepicker.iso8601Week(new Date(dateText)));
      }
    });
  });

答案 2 :(得分:1)

calculateWeek here的文档中可以看出:

  

此功能使用一周的ISO 8601定义:星期一开始星期,一年的第一周包含1月4日。

所以评论是正确的,这是一个错误。虽然目前尚未解决,但您可以通过将firstDay设置为1来轻松解决此问题:

$("#datepicker" ).datepicker({
    showWeek: true,
    firstDay: 1
});

周数是正确的,它比重写calculateWeek更容易,唯一的区别是周将从周一开始,而不是周日。请注意default behavior sets firstDay to 0.

答案 3 :(得分:1)

这是2017年第一周的jQuery日历显示 - 完全包含在新的一年中 然而,周数显示为2016年的52(wtf)。 enter image description here

对我来说,这看起来像是一个需要纠正的错误,否则就没有理由显示周数。

答案 4 :(得分:0)

https://en.wikipedia.org/wiki/ISO_week_date

一年的第一周是包含一年中第一个星期四的一周(因此,总是包含1月4日)。

答案 5 :(得分:0)

您应该更新区域设置:

moment.updateLocale('en', {
    week: {
        dow: 1,
        doy: 1
    }
});