为什么在1分钟和1小时的休息时间是在时刻表中的ISO 8601?

时间:2016-09-28 00:51:48

标签: javascript datetime reactjs momentjs iso

使用ISO 8601字符串,我正在使用Moment js并且正在执行moment("2014-05-08T00:20:40Z").format("HH:mm:ss")以简单地获得"00:20:40"的字符串时间,bu

1 个答案:

答案 0 :(得分:4)

您的ISO日期是UTC日期。这就是最后Z的含义。所以你是UTC以西的7个时区。

您开始的时间是8日午夜后20分钟。如果你在法国巴黎运行你的代码,你会得到正确的答案(忽略“夏令时”调整)。但是,由于您在西部有7个时区,因此下午5:20,您仍然在上一个日历日。

通过一种看待事物的方式,没有什么可以“修复”。基于您所在位置的本地时间版本表示与原始ISO UTC时间相同的时间点。一切都运转正常;日期值的默认表示形式为 local 时间。 JavaScript中的Date原始对象具有API,可以按照这种方式访问​​UTC中的组件。

如果要获取原始ISO字符串,可以使用.toISOString()

moment("2014-05-08T00:20:40Z").toISOString()

或者,您可以在格式字符串中包含时区标记:

moment("2014-05-08T00:20:40Z").format("HH:mm:ss zz")

(请注意,格式字符串中的“z”与ISO时间中的“Z”不同。它只是格式化特殊字符,来自“区域”一词的第一个字母。 ISO字符串,它是单词“zero”的第一个字母,它表示时间与UTC时间相差零。有些人称之为“Zulu Time”,因为它是“Z”。)