2014-09-06 86 views
0

我正在使用moment.js將ISO8601格式的時間轉換爲時期。但是,當我轉換回來的結果是不一樣的。有任何想法嗎?moment.js不正確地將時期轉換爲ISO8601

Node.js的代碼

var moment = require('moment'); 
var input ="2014-08-23T15:05:36-07:00"; 
var a = moment(input,moment.ISO_8601).valueOf(); 
console.log ("convert ISO8601 to epoch time:" + input + "====>" + a); 
var b = moment(parseInt(a)).format("YYYY-MM-DDTHH:MM:SSZ"); 
console.log ("convert epoch time to ISO8601:" + a + "====>" + b); 

輸出

convert ISO8601 to epoch time:2014-08-23T15:05:36-07:00====>1408831536000 
convert epoch time to ISO8601:1408831536000====>2014-08-23T15:08:00-07:00 

回答

1

有幾件事情:

  • 您使用的"YYYY-MM-DDTHH:MM:SSZ"格式字符串。但MM指的是幾個月,而不是分鐘 - 而SS分數秒的前兩位小數。如果你想提供一個格式字符串,它將是"YYYY-MM-DDTHH:mm:ssZ"。它是區分大小寫的。

  • 正如mscdex指出的那樣,您可以只使用.format()而不帶任何參數,因爲這是默認的輸出格式。

  • moment.ISO_8601在這種情況下不是必需的,因爲您只解析單個格式,默認情況下可以理解ISO-8601。

  • parseInt也不是必需的。 Moment將理解作爲整數或字符串傳入的值。

這樣,代碼可以被簡化爲:

var moment = require('moment'); 
var input ="2014-08-23T15:05:36-04:00"; 
var a = moment(input).valueOf(); 
console.log ("convert ISO8601 to epoch time:" + input + "====>" + a); 
var b = moment(a).format(); 
console.log ("convert epoch time to ISO8601:" + a + "====>" + b); 
1

我總是用moment.format()來獲得,而不是通過一個自定義格式字符串的ISO8601字符串。例如:

var moment = require('moment'); 
var input ="2014-08-23T15:05:36-04:00"; 
var a = moment(input,moment.ISO_8601).valueOf(); 
console.log ("convert ISO8601 to epoch time:" + input + "====>" + a); 
var b = moment(parseInt(a)).format(); 
console.log ("convert epoch time to ISO8601:" + a + "====>" + b); 

輸出:

 
convert ISO8601 to epoch time:2014-08-23T15:05:36-04:00====>1408820736000 
convert epoch time to ISO8601:1408820736000====>2014-08-23T15:05:36-04:00 
相關問題