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

Javascript 使用矩.js从ISO字符串中提取utcOffset,javascript,momentjs,Javascript,Momentjs,使用moment.js,我试图从ISO日期字符串中提取偏移量,以便稍后在格式化历元时间戳时使用偏移量,以确保时间戳的转换在同一时区 即使字符串中的偏移量为-0400,结果始终为0 var currentTime = "2015-03-18T16:10:00.001-0400"; var utcOffset = moment(currentTime).utcOffset(); // 0 我也尝试过使用parseZone(),但没有成功。是否有一种方法可以从字符串中提取-0400,以便在下次格式化

使用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()
,您可以对
“-04:00”
使用
.format('Z')
,或对
“-0400”
使用
.format('ZZ')

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

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


以美国东部时区为例,在2015年3月8日夏令时生效时,从UTC-05:00变为UTC-04:00。如果您采用您提供的值,并将其应用于3月1日的日期,您将把它置于大西洋时区而不是东部时区。

肯定有效。。。真奇怪。我没有得到同样的答案。但我会回去检查代码,看看发生了什么。感谢您链接到JSFIDLE查看它。这是一个很好的解释,Matt。关于偏移量与时区的关系,这一点很好。在我的情况下,所有应用都将使用同一天,除非在奇数情况下,时间将在一天结束时结束。在这种情况下,特别是在夏令时,我会使用错误的时间,并会评估其他选项。谢谢你的解释!这对我来说很管用。utcOffset(date)。utcOffset()@Nipun-是的,这也会管用。它的正确性稍差,因为您创建的瞬间对象将与您在
日期中提供的对象不同,但由于您无论如何都放弃了它,您将得到相同的结果。不,对于您发布的解决方案,我没有得到正确的结果。试试这个网站。它不会给出正确的时区。向下投票,@MattJohnson answer中提供的JSFIDLE不会从currentTime提取偏移量,它实际上只是输出本地机器的当前偏移量。(巧合的是,他的本地机器实际上可能有一个偏移量为-0400的时区,@Nipun的解决方案按预期工作,并返回
-240
,而不考虑本地机器的时区。