使用jQuery UI Datepicker并在星期日开始一周时,周数不正确。例如,2016年1月3日应该是第1周,因为所有日期(第3天到第9天)都在同一年。但正如您在下面的屏幕截图中看到的那样,UI将其显示为第53周。
以下是呈现datepicker的代码:
$("#datepicker" ).datepicker({
showWeek: true,
firstDay: 0
});
所以没有什么特别的,除了显示周数和周日开始周而不是周一(默认情况下)。
这是问题的一个小提琴:https://jsfiddle.net/vLqabmmz/
答案 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)
答案 4 :(得分:0)
https://en.wikipedia.org/wiki/ISO_week_date:
一年的第一周是包含一年中第一个星期四的一周(因此,总是包含1月4日)。
答案 5 :(得分:0)
您应该更新区域设置:
moment.updateLocale('en', {
week: {
dow: 1,
doy: 1
}
});