0

参考 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 }

当我更改数组中格式的顺序时,正好相反,它使用数组中的最后一个格式。

我究竟做错了什么?

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

4

1 回答 1

1

文档指出:

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

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

在您的情况下,它将与12.05.1989您的最后一个模式 ( YYYY-MM-DD) 匹配并将其解析为“12 年第 5 个月的第 1989 天”(并截断这一天,因为否则它没有意义)。

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

> '12.05.1989'.replace(/(\d{2})\.(\d{2})\.(\d{4})/, '$3-$2-$1')
'1989-05-12'
于 2013-05-16T06:27:38.783 回答