以下内容创建指定月份的周数(天数)。
输出如下:
[
[
"2017-06-01T01:00:00.000Z",
"2017-06-02T01:00:00.000Z",
"2017-06-03T01:00:00.000Z",
"2017-06-04T01:00:00.000Z"
],
...
]
那个额外的小时来自哪里?我期待所有时间都是午夜?
我目前在英国(BST)。
function monthWeeks(month, year) {
var currentMonth = month - 1;
var date = utcDate(new Date(year, currentMonth, 1));
var weeks = [];
var week;
while (date.getMonth() === currentMonth) {
if(date.getDay() === 1 || !week) {
week = [];
weeks.push(week);
}
week.push(utcDate(date));
date.setDate(date.getDate() + 1);
}
return weeks;
}
function utcDate(date) {
return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(),
date.getHours(), date.getMinutes(), date.getSeconds()));
}
console.log(monthWeeks(6, 2017));
答案 0 :(得分:3)
您看到的值是正确的 BST正好比UTC早一个小时。
function monthWeeks(month, year) {
var currentMonth = month - 1;
var date = new Date(Date.UTC(year, currentMonth, 1));
var weeks = [];
var week;
while (date.getMonth() === currentMonth) {
if(date.getDay() === 1 || !week) {
week = [];
weeks.push(week);
}
week.push(new Date(date));
date.setDate(date.getDate() + 1);
}
return weeks;
}
console.log(monthWeeks(6, 2017));

答案 1 :(得分:1)
你得到的时间是正确的。您运行的代码位于您的浏览器中,该代码基于您当地的时区。你得到的时间段是UTC时间。
因此,当您在伦敦时,您比UTC早1小时。因此,如果您要创建一个日期字符串,您希望它在午夜。 UTC午夜将在凌晨1点在伦敦举行。
这取决于您运行客户端代码的时区。所以在美国,让我们说EST时区比UTC晚了5个小时。因此,您在EST时区客户端浏览器中的代码将显示ncol (mat1) == ncol (mat3)
,即落后5小时。
UTC是标准时间,相对于所有其他时区都被引用。因此,无论何时获得UTC时间段,都不要将其与当地时区混淆。它总是会有所不同。如果它在伦敦的午夜,它将在美国(EST)不再是午夜。因此,您的客户日期时间代码的行为会有所不同。
只是一个提示:如果你想避免混淆时区而你是 无论什么时区,只对日期部分感兴趣。只是截断 时间部分和日期一起去。这将更少混淆和更多 统一适应。