2017-10-04 87 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

相關問題