教程 date-fns tutorial

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)'