使用 Moment.js 从 ISO 字符串中提取 utcOffset

Extracting utcOffset from an ISO String with Moment.js

使用 moment.js,我试图从 ISO 日期字符串中提取偏移量,以便稍后在格式化纪元时间戳时使用偏移量,以确保时间戳的转换在同一时区。

即使字符串中的偏移量为-0400,结果始终为0;

var currentTime = "2015-03-18T16:10:00.001-0400";
var utcOffset = moment(currentTime).utcOffset(); // 0

我也尝试过使用 parseZone() 但没有成功。有没有办法从字符串中提取 -0400 以便我可以在下次格式化时使用它?

感谢您的帮助! KC

提取偏移量的正确方法确实是 parseZone

var currentTime = "2015-03-18T16:10:00.001-0400";
var utcOffset = moment.parseZone(currentTime).utcOffset();

这应该导致 -240,这意味着比 UTC 晚 240 分钟,这与输入字符串中的 -0400 相同。如果你想要字符串形式,而不是 utcOffset() 你可以使用 .format('Z') 作为 "-04:00".format('ZZ') 作为 "-0400".

您在问题中提供的表格仅使用计算机的本地时区。因此,当前在您的时区(或代码为 运行 的任何地方)是 UTC+00:00,这可以解释为什么您会得到零。您必须使用 parseZone 来保留输入字符串的偏移量。

此外 - 您的用例有点令人担忧。请记住,偏移量时区 不同。时区可以在不同的时间点更改其偏移量。许多时区这样做是为了适应夏令时。如果您从一个时间戳中选择一个偏移量并将其应用于另一个时间戳,则无法保证偏移量对于新时间戳是正确的。

例如,考虑美国东部时区,当夏令时于 2015 年 3 月 8 日生效时,该时区刚刚从 UTC-05:00 更改为 UTC-04:00。如果您采用类似如果您提供了一个并将其应用于 3 月 1 日的日期,那么您会将其置于大西洋时区而不是东部时区。