2017-08-17 206 views
-1

我正在處理日期轉換。 我日這2017-08-17 13:00:00格式轉換爲2017-08-17T13:00:00ZUTC/ISO 8601格式的日期轉換

工作示例:

var from_date; 
 
var sdate = new Date('2017-08-17 13:00:00'); 
 
var utcSDate = sdate.toISOString(); 
 
from_date = utcSDate.replace('.000', ''); 
 
console.log(from_date);

但是這個代碼更改時間從13:00:0008:00:00。爲什麼這是發生。任何想法 ? 或者有人給了我一個想法,將日期從我的輸入轉換爲期望的輸出,如上所述。

+0

toISOString()方法轉換爲UTC,因此您需要將偏移量添加到您的時間 –

+0

請您詳細說明偏移量嗎? –

+0

是的,我寫了一個答案 –

回答

0

我建議只更換缺少的零件,不要使用Date對象,在那裏輸入當地時間並獲得祖魯時間。

var date = '2017-08-17 13:00:00', 
 
    iso = date.replace(/(.{10}) (.{8})/, '$1T$2.000Z'); 
 

 
console.log(date); 
 
console.log(iso);

+0

如果將來更改輸入日期格式,該怎麼辦?它如何將新的日期格式轉換爲UTC? –

0

您可以從。減去你的約會對象的偏移量:

var d = new Date(); 
var offsetInMinutes = d.getTimezoneOffset(); 
d.setMinutes(d.getMinutes() - offsetInMinutes); 
d.toISOString() 
0

但是這個代碼更改時間從13:00:00至08:00:00。爲什麼這是 發生。任何想法 ?或者有人給我一個想法,將我的輸入的日期從 轉換爲如上所述的期望輸出。

字符串「2017年8月17日13:00:00」是不是由ECMA-262支持的格式,所以但它是分析是完全依賴於實現的,看到Why does Date.parse give incorrect results?如果被解析到一個日期,它可能被視爲本地ISO 8601,即「2017-08-17T13:00:00」。 Safari會返回一個無效的日期,Firefox會將其解析爲本地。

所以總是避免內置的解析器。

如果你只是想重新格式化字符串,這樣做,作爲一個字符串:

var s = '2017-08-17 13:00:00'; 
 
console.log(s.replace(' ','T') + 'Z');

但是,你剛纔改變從什麼時區的日期和時間爲UTC + 0000它原來是在。如果你要考慮主機時區偏移,那麼你應該分析字符串手動日期(庫可以幫助,但不是必需的單一格式),然後用toISOString

// Given a string in ISO 8601 like format, parse as local 
 
function parseISOLocal(s) { 
 
    var b = s.split(/\D/); 
 
    return new Date(b[0], b[1]-1, b[2], (b[3] || 0), 
 
    (b[4] || 0), (b[5] || 0)); 
 
} 
 

 
var s = '2017-08-17 13:00:00'; 
 

 
console.log(parseISOLocal(s).toISOString())