问题描述
我正在努力理解ISO8601 time format
这个值是什么意思?
2019-11-14T00:55:31.820Z
我是这么理解的
2019-11-14 // November 14th,2019
T00:55:31 // 12:55 AM in GMT time (London)
.820 // why is this needed or specified?
Z // The "Z" indicates to store this as GMT time (London)
我不明白为什么这里需要 .820
。阅读它,这是指时区 820,即加利福尼亚。
如果我去 Javascript 控制台并在有和没有 820 值的情况下编写此代码,根据我的语言环境(EST 时区),我会得到相同的结果
new Date('2019-11-14T00:55:31.820Z') // Wed Nov 13 2019 19:55:31 GMT-0500 (Eastern Standard Time)
new Date('2019-11-14T00:55:31Z') // Wed Nov 13 2019 19:55:31 GMT-0500 (Eastern Standard Time)
Z
之前的前缀值实际上是做什么的?
解决方法
“Z”表示将此存储为 GMT 时间(伦敦)
否,它表示显示的时间值是 UTC,而不是您应该将其存储在 GMT/UTC 中。它会告诉您在哪个时区解释所提供的信息。
我不明白为什么这里需要 .820。阅读它,这是指时区 820,即加利福尼亚。
那是毫秒,而不是时区。到 00:55:31
有 820 毫秒(例如,距离 00:55:32
有 180 毫秒)。
如果我去 Javascript 控制台并在有和没有 820 值的情况下编写此代码,根据我的语言环境(EST 时区),我会得到相同的结果
只是因为您引用的任何控制台的输出不包括毫秒。如果您检查实际日期,您会发现它们相距 820 毫秒:
const dt1 = new Date('2019-11-14T00:55:31.820Z');
const dt2 = new Date('2019-11-14T00:55:31Z');
console.log(dt1.valueOf() - dt2.valueOf()); // 820
(Date
实例的基础值是它自 1970 年 1 月 1 日午夜 UTC 以来所代表的毫秒数。因此,如果我们减去 d2
[它没有 { {1}}] 来自 .820
[确实],我们看到它们相距 820 毫秒。)