moment.js String +格式不按预期工作

时间:2013-05-16 02:50:44

标签: node.js momentjs

参考moment.js String + Formats的文档我希望这两行返回相同的日期对象:

moment('12.05.1989', ['DD.MM.YYYY','YYYY-MM-DD']);
moment('1989-05-12', ['DD.MM.YYYY','YYYY-MM-DD']);

然而,我得到的是第一次约会:

{ _i: '12.05.1989',
  _f: 'YYYY-MM-DD',
  _l: undefined,
  _isUTC: false,
  _a:
   [ 12,
     4,
     19,
     0,
     0,
     0,
     0 ],
  _d: Sat May 19 12 00:00:00 GMT+0200 (W. Europe Summer Time),
  _isValid: true }

虽然第二个是正确的:

{ _i: '1989-05-12',
  _f: 'YYYY-MM-DD',
  _l: undefined,
  _isUTC: false,
  _a:
   [ 1989,
     4,
     12,
     0,
     0,
     0,
     0 ],
  _d: Fri May 12 1989 00:00:00 GMT+0200 (W. Europe Summer Time),
  _isValid: true }

当我更改数组中格式的顺序时,它完全相反,它使用数组中的最后一种格式。

我做错了什么?

我想避免像检查字符串“ - ”或“。”那样的变通方法。

1 个答案:

答案 0 :(得分:1)

documentation州:

  

解析器忽略非字母数字字符,因此两者都是   以下将返回相同的内容。

moment("12-25-1995", "MM-DD-YYYY");
moment("12\25\1995", "MM-DD-YYYY");

在您的情况下,它会将12.05.1989与您的上一个模式(YYYY-MM-DD)进行匹配,并将其解析为“第12个月的第5个月的日期”(并截断当天,因为它没有意义)。

我不确定如何防止这种情况发生,因此可能需要您规范化日期格式:

> '12.05.1989'.replace(/(\d{2})\.(\d{2})\.(\d{4})/, '$3-$2-$1')
'1989-05-12'