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 的 useAdditionalDayOfYearTokens 选项和 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)'