参考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 }
当我更改数组中格式的顺序时,它完全相反,它使用数组中的最后一种格式。
我做错了什么?
我想避免像检查字符串“ - ”或“。”那样的变通方法。
答案 0 :(得分:1)
解析器忽略非字母数字字符,因此两者都是 以下将返回相同的内容。
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'