如何获得划时代的时间在momentjs使用UTCOFFSET
const epoch = Date.UTC(2017,09,24)
const moment_epoch = moment.utc(epoch).utcOffset(5.5).valueOf()
后为什么epoch
和moment_epoch
产生当我把偏移相同的输出?如何获得划时代的时间在momentjs使用UTCOFFSET
如何获得划时代的时间加上偏移后?
如果检查值,一步一步,它变得更容易理解发生了什么:
-
Date.UTC(2017,09,24)
产生的时间戳等同于10月24日日 2017年,在午夜,在UTC(1508803200000
)。 -
moment.utc(epoch)
产生在UTC的日期,等效于上面的值单位为毫秒:星期二2017年10月24日00:00:00 GMT + 0000
-
moment.utc(epoch).utcOffset(5.5)
刚转换偏移UTC日期到+05:30
:星期二2017年10月24日5时30分〇〇秒GMT + 0530
但是这两个日期对应于同一时刻(UTC的午夜时间与+05:30
偏移量中的5:30 AM相同),所以millis值将相同(均为1508803200000
)。
不知道你想要做什么,但无论如何:
- ,如果你想添加 5小时30分钟,日
,只是做:
moment.utc(epoch).add(5, 'h').add(30, 'm')
请注意,这不会更改偏移量。它只是得到一个约5小时30分钟的日期。
-
如果你想要那个correponds在
+05:30
午夜偏移的日期,你可以这样做:moment.utc(epoch).utcOffset(5.5, true)
第二个参数tells
momentjs
to preserve the same local date/time,因此,而不是转换为日期/时间偏移,它保持相同值 - 在这种情况下,这将是午夜+05:30
偏移:星期二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
(上午5:30,抵消+05:30
,相当于UTC的午夜 - 两者都代表相同的时刻,这就是为什么valueOf()
是相同的原因)。
第三行(与utcOffset(5.5, true)
)不UTC转换午夜5:30 AM印度。相反,它会创建一个相当于印度午夜的日期,这就是为什么结果为24/10/2017 00:00 +05:30
。而valueOf()
返回,相当于午夜在印度和23/10/2017 18:30在UTC(前一天下午6:30,这就是为什么值低于原始值) 。
Date.UTC(2017,09,24)和Date.UTC(2017,09,24,05,30)为什么会产生不同的时代? moment.utc(1508803200000).utcOffset(5.5,true)减去moment.utc(Date.UTC(2017,09,24))的结果是一个负值,它应该是一个正数,对吧? – Nikhil
@Nikhil你究竟想要做什么?结果应该是什么? – 2017-10-04 15:37:34
@Nikhil UTC(2017,09,24)'创建** 2017年10月24日,UTC时间午夜**,而UTC(2017,09,24,05,30)'创建** 2017年10月24日,在UTC时间上午5:30(** UTC午夜后5小时30分钟**)。 'utcOffset(5.5,true)'在+05:30偏移量**中创建**午夜,对应** 2017年10月23日(前一天)18:30以UTC **形式发生,所以发生了5小时30分钟** UTC午夜之前**:https://www.worldtimebuddy.com/?qm=1&lid=100,30&h=100&date=2017-10-4&sln=18.5-19 – 2017-10-04 15:44:59
[“*时间”是一个用词不当。请停止使用该术语。](https://codeofmatt.com/2017/10/05/please-dont-call-it-epoch-time/)您的意思是“以毫秒为单位的Unix时间戳” - 它始终以UTC 。调整偏移会改变您的本地视角 - 而不是即时显示。 –