使用utcoffset后如何在momentjs中获取纪元时间
How to get epoch time in momentjs after using utcoffset
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 日th 午夜的 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 午夜与 5:30 AM 在 +05: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,因此它不会将 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 AM)。
第一行只是获取UTC的这个值,所以结果是24/10/2017 00:00 +00:00
.
第二行将这个相同的值转换为 +05:30
偏移量中相应的本地 date/time。这不会改变纪元值(它仍然对应于 1508803200000
)。结果相当于印度的 date/time,也就是 24/10/2017 05:30 +05:30
(5:30 AM 的偏移量 +05:30
,相当于 UTC 的午夜 - 两者代表相同的时刻,这就是为什么valueOf()
是一样的)。
第三行(utcOffset(5.5, true)
)没有将 UTC 的 midnight 转换为印度的 5:30AM[=86] =].相反,它创建了一个相当于印度午夜 的日期,这就是结果为24/10/2017 00:00 +05:30
的原因。而 valueOf()
returns 1508783400000
,相当于 印度的午夜 和 23/10/2017 18:30 in UTC(前一天下午6点30分,所以这个值比原来的值低)。
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 日th 午夜的 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 午夜与 5:30 AM 在 +05: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,因此它不会将 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 AM)。
第一行只是获取UTC的这个值,所以结果是24/10/2017 00:00 +00:00
.
第二行将这个相同的值转换为 +05:30
偏移量中相应的本地 date/time。这不会改变纪元值(它仍然对应于 1508803200000
)。结果相当于印度的 date/time,也就是 24/10/2017 05:30 +05:30
(5:30 AM 的偏移量 +05:30
,相当于 UTC 的午夜 - 两者代表相同的时刻,这就是为什么valueOf()
是一样的)。
第三行(utcOffset(5.5, true)
)没有将 UTC 的 midnight 转换为印度的 5:30AM[=86] =].相反,它创建了一个相当于印度午夜 的日期,这就是结果为24/10/2017 00:00 +05:30
的原因。而 valueOf()
returns 1508783400000
,相当于 印度的午夜 和 23/10/2017 18:30 in UTC(前一天下午6点30分,所以这个值比原来的值低)。