我使用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
答案 0 :(得分: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
答案 1 :(得分: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);