首页 > 解决方案 > 如何使用 moment.js 解析“date -u”(unix 日期命令,UTC)的输出?

问题描述

我只是注意到 unix date 命令不输出 iso8601 或 RFC2822 格式的日期。

我有一些输入 json 文档,其日期指定为 unix 的输出date -u,例如:Mon Oct 22 04:08:48 UTC 2018. 我的日期总是在,UTC因为它们是用date -u. (下次我会很聪明,只是date -u +"%Y-%m-%dT%H:%M:%SZ"用来获取 iso8601 日期。)

我已经搜索了用于解析的文档并彻底搜索了网络,但无法弄清楚我做错了什么。

我正在尝试使用 moment.js 解析这些:

const instr = 'Mon Oct 22 03:53:08 UTC 2018';
const dateFormatString = "ddd MMM DD HH:mm:ss [UTC] GGGG";
const parsedDate = moment.utc(instr, dateFormatString, true);

它仍然只是给我:

moment.invalid(/* Mon Oct 22 03:53:08 UTC 2018 */)

我究竟做错了什么?

例子:

https://jsfiddle.net/1c3g0r4j/

var parseString  = 'Mon Oct 22 03:53:08 UTC 2018'; 
var formatString = 'ddd MMM DD HH:mm:ss [UTC] gggg';
var locale = 'en';
var strictParse = true;
var parsed = moment.utc(parseString, formatString, locale, strictParse);

alert(parsed.isValid())  //false

标签: javascriptdatetimemomentjs

解决方案


上面的 Mark Meyer 为我们提供了解决方案,它似乎使用了特定于语言环境的 year token YYYY

var parseString  = 'Mon Oct 22 03:53:08 UTC 2018'; 
var formatString = 'ddd MMM DD HH:mm:ss [UTC] YYYY';
var locale = 'en';
var strictParse = true;
var parsed = moment.utc(parseString, formatString, locale, strictParse);

alert(parsed.isValid())
alert(parsed.toISOString())


推荐阅读