如何在jQuery/JavaScript中实现多语言自定义日期格式化
多语言自定义日期格式化实现方案
核心用浏览器原生Intl.DateTimeFormat API实现,无需额外引入第三方日期库,原生支持多语言规则适配,自动输出对应语言的星期、月份全称,比手动维护多语言映射表兼容性、准确性更好。
实现步骤
- 先解析日期选择器返回的
dd-mm-yyyy格式字符串,转换为合法的Date对象,注意JS中月份计数从0开始,转换时需要做偏移 - 基于当前语言环境,通过
Intl.DateTimeFormat提取对应语言的星期全称、月份全称 - 针对不同语言的特殊格式规则做适配:
- 丹麦语格式:在日期数字前加
d.标识 - 英语格式:给日期数字加对应序数词后缀(st/nd/rd/th)
- 丹麦语格式:在日期数字前加
完整可运行代码
直接替换原有逻辑即可:
// 英语序数词后缀计算工具 function getEnOrdinalSuffix(day) { 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'; } } // 多语言日期格式化核心函数 function formatLocalDate(dateStr, locale = 'da') { // 拆分dd-mm-yyyy格式的原始日期 const [day, month, year] = dateStr.split('-').map(Number); const dateObj = new Date(year, month - 1, day); // 获取对应语言的星期全称 const weekday = new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(dateObj); // 获取对应语言的月份全称 const monthName = new Intl.DateTimeFormat(locale, { month: 'long' }).format(dateObj); // 按不同语言规则拼接结果 if (locale === 'da') { return `${weekday} d. ${day} ${monthName} ${year}`; } if (locale === 'en') { return `${weekday} ${day}${getEnOrdinalSuffix(day)} ${monthName} ${year}`; } // 其他语言可以按需求在这里扩展规则 return dateStr; } $(document).ready(function() { $('#BtnProceed').click(function() { // 原始日期值,和原有逻辑保持一致 const rawDate = EndCalendar.getFormatedDate(); // 可替换为实际的当前语言获取逻辑,比如读html标签的lang属性 const currentLocale = document.documentElement.lang || 'da'; // 格式化后的值 const formattedDate = formatLocalDate(rawDate, currentLocale); $("#ConfirmEndDateHolder").text(formattedDate); // 如果是表单元素同步赋值value document.getElementById("ConfirmEndDateHolder").value = formattedDate; }); });
使用说明
- 语言参数可以直接读取页面
<html>标签的lang属性,自动跟随页面语言切换,不需要手动硬编码 - 如果需要支持更多语言,只需要在
formatLocalDate函数里新增对应语言的拼接规则即可,星期和月份名称会由IntlAPI自动根据locale生成,不需要手动翻译 - 所有现代浏览器(Chrome、Firefox、Safari 14+、Edge)都原生支持
Intl.DateTimeFormat,不需要做额外兼容
内容的提问来源于stack exchange,提问作者Stig Kølbæk
相关产品推荐
相关产品推荐

