使用moment.js,我正在尝试从ISO日期字符串中提取偏移量,以便稍后在格式化纪元时间戳时使用偏移量,以确保时间戳的转换位于同一时区。
即使字符串中的偏移量为-0400,结果也始终为0;
var currentTime = "2015-03-18T16:10:00.001-0400";
var utcOffset = moment(currentTime).utcOffset(); // 0
我试图使用parseZone()也没有成功。有没有办法从字符串中提取-0400所以我可以在格式化另一个时间时使用它?
感谢您的帮助! KC
答案 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日的日期,您将把它放入大西洋时区而不是东部时区。