如何使Date-fns生成与Moment格式一致的日期(含序数词、小写时段)
解决Date-fns日期格式中添加序数词后缀及时段小写的问题
你可以通过使用date-fns的format函数(而非intlFormat)并配合自定义格式字符串,来实现和moment一致的输出效果:
实现步骤
- 引入date-fns的
format函数以及英文本地化配置(确保序数词和时段格式正确) - 使用自定义格式字符串指定输出样式,其中:
do表示带序数词后缀的月份日期(如11th)a表示小写的时段标识(如pm)
完整代码示例
const moment = require("moment-timezone"); const { format } = require('date-fns'); const { enUS } = require('date-fns/locale'); // Moment原输出 let d0 = moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); console.log(d0); // Date-fns调整后输出 let d1 = format(new Date(), "dddd, MMMM do YYYY, h:mm:ss a", { locale: enUS }); console.log(d1);
输出结果
Monday, December 11th 2023, 3:55:27 pm Monday, December 11th 2023, 3:55:27 pm
补充说明
- 之所以不用
intlFormat,是因为它基于浏览器/Node的Intl API,在自定义序数词格式上灵活性不足;而format是date-fns原生的格式化方法,支持更精细的格式控制。 - 项目中无需额外安装本地化依赖,date-fns包已内置各语言的本地化配置文件。
内容的提问来源于stack exchange,提问作者user3552178
相关产品推荐
相关产品推荐

