这个小时从哪里来?

时间:2017-06-24 20:16:41

标签: javascript date

以下内容创建指定月份的周数(天数)。

输出如下:

[
  [
    "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));

2 个答案:

答案 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)不再是午夜。因此,您的客户日期时间代码的行为会有所不同。

  

只是一个提示:如果你想避免混淆时区而你是   无论什么时区,只对日期部分感兴趣。只是截断   时间部分和日期一起去。这将更少混淆和更多   统一适应。