2017-11-04 96 views
0

有沒有一種方法可以將UTC或Moment JS對象或Date()對象的類型/格式或包含datetime的純字符串的傳入變量檢測/轉換爲Moment JS對象的常見格式?要將任何類型的javascript datetime變量轉換爲JS對象時刻

例子:

"1509760983", 
Date 2017-10-10T02:20:10.570Z, 
Object { _isAMomentObject: true, _isUTC: false, _locale: Object, _d: Date 2017-11-04T02:17:33.747Z, _z: null }, 
"Sat, 04 Nov 2017 02:03:03 GMT", 
"2017-11-04T02:20:14.896Z" 

我劈:

var offset = moment().utcOffset(); 
momentObj = moment(variable).utcOffset(offset); 

我能夠把所有其他格式瞬間JS轉換沒有在數據中的任何「偏差」,但如果變量已經是Date()對象。

var offset = moment().utcOffset(); 
momentObj = (variable instanceof Date) ? moment(variable) : moment(variable).utcOffset(offset); 

注:由於Date()對象只能在瀏覽器中生成的,所以沒有必要添加偏移時間轉換爲本地時區。

是否有更好的(故障安全)方法來解決此問題?

+0

看一看['moment.utc()'](http://momentjs.com/docs/#/parsing/utc/):_By默認情況下,時刻解析並在本地時間顯示。如果你想解析或顯示UTC的時刻,你可以使用'moment.utc()'而不是'moment()'_ – VincenzoC

+0

@VincenzoC req。是在本地時間顯示所有輸入的'datetime',不管它們在什麼時間格式。這就是添加偏移量的原因。 – Mikki

+0

我不完全得到你正在嘗試做的,你可以提供一個片斷或小提琴和您預期的結果的例子嗎?無論如何看看['local()'](http://momentjs.com/docs/#/manipulating/local/)函數將矩對象轉換爲本地模式(默認)。請參閱[本地vs UTC與偏移量](http://momentjs.com/guides/#/parsing/local-utc-zone/)指南。 – VincenzoC

回答

1

javascript日期「Z」的最後一個字符顯示對象的時區設置爲UTC(Z時間,祖魯時間)。你正在獲得正確的時區。如果您想將時區轉換爲本地時區,則應使用moment timezone plugin和moment.js。

然後,你會怎麼做:

momentObj = moment(variable).tz(moment.tz.guess()); 

轉換/設置所有時刻對象到用戶的時區。