【发布时间】:2020-09-16 19:43:55
【问题描述】:
我正在开发一个应用程序,用户可以在其中选择他们记录时间的时区。但在内部,我想将时间存储为 unix 时间戳。
假设我有一个日期“2016-01-01 1:00 pm”。如果我将此日期存储在 CDT(美国/芝加哥)中,我的理解是生成的 unix 时间戳应该与我在 MDT(美国/丹佛)中存储相同日期不同。但是,我在两个日期都得到了相同的 unix 时间戳,我无法理解为什么。
var chicagoDate = moment('2016-01-01 1:00 pm').tz('America/Chicago');
var denverDate = moment('2016-01-01 1:00 pm').tz('America/Denver');
chicagoDate.format();
// "2016-01-01T07:00:00-06:00"
denverDate.format();
// "2016-01-01T06:00:00-07:00"
到目前为止,这证实了这两个日期彼此不同,如使用 format() 获得的 UTC 表示所示。但这是我感到困惑的地方:
chicagoDate.unix();
// 1451653200
denverDate.unix();
// 1451653200
2 个不同的 UTC 日期不应该导致 2 个不同的 unix 时间戳吗?
【问题讨论】:
-
unix 时间戳是相同的,您唯一要做的就是根据时区更改日期字符串的显示方式。即使 "2016-01-01T07:00:00-06:00" !== "2016-01-01T06:00:00-07:00" 都代表相同的 UTC 日期 2016-01-01T00:00:00 -00:00,这就是为什么你总是会看到相同的 unix 时间戳值。
-
UTC 是时间标准,而不是格式。 moment#format 的默认格式是主机或指定时区中的 ISO 8601,以适用者为准。另请注意,由于您没有提供解析格式,moment.js 将回退到内置解析器,因此结果可能是无效的日期(例如 Safari)。
标签: javascript datetime momentjs unix-timestamp