如何用JavaScript生成带序数词的美式英文日期格式?
解决
toLocaleDateString显示日期序数词的问题 原生的toLocaleDateString并没有直接支持显示序数词(如1st、2nd)的配置项,因此需要在生成基础日期字符串后,手动处理数字部分为序数词格式。
实现步骤
编写一个生成序数词后缀的辅助函数,处理不同数字对应的后缀规则:
function getOrdinalSuffix(day) { // 11-19的数字统一用th后缀 if (day > 3 && day < 21) return 'th'; switch (day % 10) { case 1: return 'st'; case 2: return 'nd'; case 3: return 'rd'; default: return 'th'; } }生成基础日期字符串后,替换数字部分为带序数词的形式:
const options = { weekday: "short", year: "numeric", month: "short", day: "numeric", }; const baseDate = new Date().toLocaleDateString("en-US", options); const day = new Date().getDate(); // 替换日期中的数字为带序数词的格式 const formattedDate = baseDate.replace(/(\d+)/, `${day}${getOrdinalSuffix(day)}`); console.log(formattedDate); // 输出示例: "Thu, Jan 4th, 2024"
另一种更灵活的拼接方式
也可以单独获取日期的各个部分,手动拼接成目标格式:
const date = new Date(); const weekday = date.toLocaleDateString("en-US", { weekday: "short" }); const month = date.toLocaleDateString("en-US", { month: "short" }); const day = date.getDate(); const year = date.getFullYear(); const ordinalDay = `${day}${getOrdinalSuffix(day)}`; const formattedDate = `${weekday}, ${month} ${ordinalDay}, ${year}`; console.log(formattedDate);
注意事项
ECMAScript国际化API的day配置项仅支持"numeric"和"2-digit"两种取值,没有直接输出序数词的选项,因此必须通过手动处理来实现需求。
内容的提问来源于stack exchange,提问作者edsonlm27
相关产品推荐
相关产品推荐

