Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个小时从哪里来?_Javascript_Date - Fatal编程技术网

Javascript 这个小时从哪里来?

Javascript 这个小时从哪里来?,javascript,date,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) 功能月周(月、年){ var currentMonth=第1个月; var

以下内容将为指定月份创建一个周(天)数组

输出如下所示:

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

功能月周(月、年){
var currentMonth=第1个月;
var日期=utcDate(新日期(年、当前月、1));
var周=[];
var周;
而(date.getMonth()==currentMonth){
如果(date.getDay()==1 | |!周){
周=[];
周。推(周);
}
周推送(utcDate(日期));
date.setDate(date.getDate()+1);
}
返回周;
}
功能utcDate(日期){
返回新日期(Date.UTC(Date.getFullYear(),Date.getMonth(),Date.getDate(),
date.getHours(),date.getMinutes(),date.getSeconds());
}

控制台日志(2017年6月6日)您看到的值是正确的。
英国夏令时正好比UTC早一小时

功能月周(月、年){
var currentMonth=第1个月;
var date=新日期(date.UTC(年,当前月,1));
var周=[];
var周;
而(date.getMonth()==currentMonth){
如果(date.getDay()==1 | |!周){
周=[];
周。推(周);
}
推送(新日期(日期));
date.setDate(date.getDate()+1);
}
返回周;
}

控制台日志(2017年6月6日)您得到的时间是正确的。您正在运行的代码位于基于本地时区的浏览器中。您得到的时间字符串是UTC时间

因此,当您在伦敦时,您比UTC提前1小时。因此,如果您要创建一个日期字符串,希望它是午夜。UTC午夜时间为伦敦凌晨1点

这将取决于运行客户端代码的时区。所以在美国,假设EST时区比UTC晚5小时。因此,您在EST时区客户端浏览器中的代码将显示“2017-05-31T19:00:00.000Z”
,即延迟5小时

UTC是标准时间,与所有其他时区相关。因此,无论何时获取UTC时间字符串,都不要将其与本地时区混淆。它将永远是不同的。如果伦敦是午夜,美国就不会是午夜了。因此,您的客户机日期时间代码的行为将有所不同

只是一个提示:如果你想避免时区的混淆,你是 只对日期部分感兴趣,无论时区如何。只需截断 时间和日期分开。它将不再那么令人困惑,而是更加令人困惑 一致适应


对我来说,它正确地显示了
05:30
这是我在印度的时区(+5:30)这是你当前的时区与格林尼治标准时间的差异。你比格林尼治标准时间提前了1小时。这就是为什么增加了1小时。我以为我的代码都是UTC的。额外的时间从哪里来了?你得到的周不是ISO周,而是从每月的第一个星期一开始。您所需要做的不是在utcDate中设置小时、分钟和秒,使它们默认为零。但我想我是在向数组中添加UTC日期。我的意思是
var date=utcDate(新日期(年,当前月,1))是否应该创建UTC午夜日期?我以为我的代码是“全部在UTC中”-它不在哪里?上面添加的代码片段都在UTCIf中。你问我,你可以将年和月发送到utcDate(日期)函数本身。你的代码片段只会加剧问题,现在为每个输出的日期时间显示
T02:00:00
。我刚刚意识到了这一点。正在做。如果EST是-0500,那么午夜是19:00Z,而不是20:00Z。哦,是的,谢谢你的更正。美国也实行夏时制。这又是一个棘手的问题。