K_C*_*K_C 4 javascript momentjs
使用moment.js,我试图从ISO日期字符串中提取偏移量,以便稍后在格式化纪元时间戳时使用偏移量,以确保时间戳的转换位于同一时区.
即使字符串中的偏移量为-0400,结果始终为0;
var currentTime = "2015-03-18T16:10:00.001-0400";
var utcOffset = moment(currentTime).utcOffset(); // 0
Run Code Online (Sandbox Code Playgroud)
我试图使用parseZone()也没有成功.有没有办法从字符串中提取-0400所以我可以在格式化另一个时间时使用它?
谢谢您的帮助!KC
Mat*_*int 13
提取偏移量的正确方法确实如此 parseZone
var currentTime = "2015-03-18T16:10:00.001-0400";
var utcOffset = moment.parseZone(currentTime).utcOffset();
Run Code Online (Sandbox Code Playgroud)
这应该导致-240,这意味着落后于UTC 240分钟,这-0400与输入字符串中的相同.如果你想要字符串形式,而不是utcOffset()你可以使用.format('Z')for "-04:00"或.format('ZZ')for "-0400".
您在问题中提供的表单只使用计算机的本地时区.所以它在你的时区(或代码运行的任何地方)目前是UTC + 00:00,这可以解释为什么你会得到零.您必须使用parseZone保留输入字符串的偏移量.
此外 - 您的用例有点令人担忧.请记住,偏移与时区不同.时区可以在不同的时间点改变其偏移.许多时区都是为了适应夏令时.如果从一个时间戳中选择偏移量并将其应用于另一个时间戳,则无法保证偏移量对于新时间戳是正确的.
例如,考虑美国东部时区,当夏令时于2015年3月8日生效时,该时区刚刚从UTC-05:00变为UTC-04:00.如果您选择的值与您提供的值相同,并且将它应用到3月1日,您将把它放入大西洋时区而不是东部时区.