2014-09-06 85 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 
相关问题