const epoch = Date.UTC(2017,09,24)
const moment_epoch = moment.utc(epoch).utcOffset(5.5).valueOf()
为什么 epoch
和 moment_epoch
在我添加偏移量时产生相同的输出?
添加偏移量后如何获取纪元时间?
最佳答案
如果您一步一步地检查这些值,就会更容易理解发生了什么:
Date.UTC(2017,09,24)
生成相当于 2017 年 10 月 24 日 午夜的 UTC 时间戳(1508803200000
).moment.utc(epoch)
生成 UTC 日期,相当于上面的毫秒值:Tue Oct 24 2017 00:00:00 GMT+0000
moment.utc(epoch).utcOffset(5.5)
只是将 UTC 日期转换为+05:30
偏移量:Tue Oct 24 2017 05:30:00 GMT+0530
但是两个日期对应于同一时刻(UTC 午夜与 +05:30
偏移量中的凌晨 5:30 相同),因此毫秒值将相同(两者都是1508803200000
).
不确定你到底想做什么,但无论如何:
如果您想将日期添加 5 小时 30 分钟,只需执行以下操作:
moment.utc(epoch).add(5, 'h').add(30, 'm')
请注意,这不会更改偏移量。它只会得到一个比原始日期晚 5 小时 30 分钟的日期。
如果您想要一个对应于午夜的
+05:30
偏移量的日期,您可以这样做:moment.utc(epoch).utcOffset(5.5, true)
第二个参数tells
momentjs
to preserve the same local date/time ,因此它不会将日期/时间转换为偏移量,而是保留相同的值 - 在这种情况下,它将是+05:30
偏移量中的午夜:Tue Oct 24 2017 00:00:00 GMT+0530
关于 your jsfiddle link ,我只是稍微改变了它以打印偏移量:
moment.utc(1508803200000).format("DD/MM/YYYY HH:mm Z") // 24/10/2017 00:00 +00:00
moment.utc(1508803200000).utcOffset(5.5).format("DD/MM/YYYY HH:mm Z") // 24/10/2017 05:30 +05:30
moment.utc(1508803200000).utcOffset(5.5, true).format("DD/MM/YYYY HH:mm Z") // 24/10/2017 00:00 +05:30
moment.utc(1508803200000).valueOf() // 1508803200000
moment.utc(1508803200000).utcOffset(5.5).valueOf() // 1508803200000
moment.utc(1508803200000).utcOffset(5.5, true).valueOf() // 1508783400000
值 1508803200000
对应于 2017-10-24T00:00:00Z
(UTC 午夜)和 2017-10-24T05:30+05 :30
(印度上午 5:30)。
第一行只是获取 UTC 中的这个值,所以结果是 24/10/2017 00:00 +00:00
。
第二行将相同的值转换为 +05:30
偏移量中相应的本地日期/时间。这不会更改纪元值(它仍然对应于 1508803200000
)。结果是印度的等效日期/时间,即 24/10/2017 05:30 +05:30
(偏移 +05:30
上午 5:30 ,相当于 UTC 中的午夜 - 两者代表相同的时刻,这就是 valueOf()
相同的原因)。
第三行(使用 utcOffset(5.5, true)
)不会将 UTC 午夜 转换为 印度上午 5:30 .相反,它会创建一个等同于印度午夜 的日期,这就是结果为 24/10/2017 00:00 +05:30
的原因。 valueOf()
返回 1508783400000
,这相当于 印度午夜 和 23/10/2017 18:30 UTC(前一天下午 6:30,因此该值低于原始值)。
关于javascript - 使用utcoffset后如何在momentjs中获取纪元时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46564738/