2017-10-04 99 views
2
const epoch = Date.UTC(2017,09,24) 

const moment_epoch = moment.utc(epoch).utcOffset(5.5).valueOf() 

后为什么epochmoment_epoch产生当我把偏移相同的输出?如何获得划时代的时间在momentjs使用UTCOFFSET

如何获得划时代的时间加上偏移后?

+1

[“大纪元时间”是一个用词不当。请停止使用该术语。](https://codeofmatt.com/2017/10/05/please-dont-call-it-epoch-time/)您的意思是“以毫秒为单位的Unix时间戳” - 它始终以UTC 。调整偏移会改变您的本地视角 - 而不是即时显示。 –

回答

2

如果检查值,一步一步,它变得更容易理解发生了什么:

  • 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,这就是为什么值低于原始值) 。

+0

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

+0

@Nikhil你究竟想要做什么?结果应该是什么? – 2017-10-04 15:37:34

+0

@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

相关问题