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

时间:2015-03-18 18:54:15

标签: javascript momentjs

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

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

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

我试图使用parseZone()也没有成功。有没有办法从字符串中提取-0400所以我可以在格式化另一个时间时使用它?

感谢您的帮助! KC

1 个答案:

答案 0 :(得分:11)

提取偏移量的正确方法确实是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日的日期,您将把它放入大西洋时区而不是东部时区。