const epoch = Date.UTC(2017,09,24)
const moment_epoch = moment.utc(epoch).utcOffset(5.5).valueOf()
为什么epoch
和moment_epoch
在添加偏移时会产生相同的输出?
如何在添加偏移量后获得纪元时间?
答案 0 :(得分:2)
如果您逐步检查这些值,就会更容易理解发生了什么:
Date.UTC(2017,09,24)
生成的时间戳相当于2017年10月24日 th ,午夜,UTC(1508803200000
)。moment.utc(epoch)
以UTC格式生成日期,相当于上面的millis值:
2017年10月24日星期二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 AM相同),因此millis值将相同(均为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
偏移量中为午夜:< / p>
2017年10月24日星期二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点,这就是为什么价值低于原价值的原因。)