Unicode 标记
从 v2 开始,format
和parse
使用 [Unicode 标记](Unicode Locale Data Markup Language (LDML) Part 4: Dates)。
这些标记不同于 Moment.js 和其他选择使用自定义格式规则的库。 虽然使用标准可确保库的兼容性和未来,但它会引起本文档打算解决的混乱。
流行的错误
有 4 个标记会导致大多数混淆:
表示一年中的某一天(1、2、...、365、366)的 D
和 DD
经常与表示一个月中的某一天(1、2、...、31)的 d
和 dd
混淆。
YY
和 YYYY
代表当地的周编号年份(44、01、00、17)经常与代表日历年的 yy
和 yyyy
混淆。
javascript
// ❌ Wrong!
format(new Date(), 'YYYY-MM-DD')
//=> 2018-10-283
// ✅ Correct
format(new Date(), 'yyyy-MM-dd')
//=> 2018-10-10
// ❌ Wrong!
parse('11.02.87', 'D.MM.YY', new Date()).toString()
//=> 'Sat Jan 11 1986 00:00:00 GMT+0200 (EET)'
// ✅ Correct
parse('11.02.87', 'd.MM.yy', new Date()).toString()
//=> 'Wed Feb 11 1987 00:00:00 GMT+0200 (EET)'
为了帮助解决这个问题,如果 D 和 DD 的 useAdditionalDayOfYearToken
s 选项和 YY
和 YYYY
的 useAdditionalWeekYearTokens
选项,format
和parse
函数将不会接受这些令牌:
javascript
format(new Date(), 'D', { useAdditionalDayOfYearTokens: true })
//=> '283'
parse('365+1987', 'DD+YYYY', new Date(), {
useAdditionalDayOfYearTokens: true,
useAdditionalWeekYearTokens: true
}).toString()
//=> 'Wed Dec 31 1986 00:00:00 GMT+0200 (EET)'