dayjs能否实现德语环境下带句点的月份缩写格式化输出?
Day.js 德语格式化无法输出带句点的月份缩写问题
问题描述
- 目标:输出德语格式日期,月份缩写带句点,最终效果为
1. Feb. 2012 - 已有尝试:
- 沿用Moment.js的格式化模板
'Do MMM YYYY',运行代码dayjs(date).format('Do MMM YYYY'),实际输出1. Feb 2012,月份无句点 - 尝试使用格式符
MMMo,仍无法得到预期输出
- 沿用Moment.js的格式化模板
原因说明
Day.js 的内置德语区域配置中,默认的monthsShort属性本身不带句点,和 Moment.js 的默认配置逻辑不一致,因此直接使用原有模板无法输出带句点的月份。
解决方法
方法1:更新德语Locale的内置缩写配置
直接修改德语区域的月份缩写规则,给需要加句点的月份手动补全句点,无需额外修改格式化模板:
// 先引入Day.js核心与德语locale import dayjs from 'dayjs' import 'dayjs/locale/de' // 更新德语locale的月份缩写配置 dayjs.updateLocale('de', { monthsShort: ['Jan.', 'Feb.', 'März', 'Apr.', 'Mai', 'Juni', 'Juli', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.'] }) // 直接使用原有模板即可得到预期输出 dayjs('2012-02-01').locale('de').format('Do MMM YYYY') // 输出结果:1. Feb. 2012
注意:德语语法中长度超过4个字符的月份缩写无需加句点,仅需给短缩写(Jan、Feb等)追加句点即可
方法2:自定义格式化占位符
如果不想修改全局locale配置,可以通过扩展自定义格式化规则,在输出月份缩写时自动追加句点:
import advancedFormat from 'dayjs/plugin/advancedFormat' dayjs.extend(advancedFormat) // 新增自定义格式化规则 dayjs.formatting.prototype.mmmDot = function () { const shortMonth = this.monthsShort(this.month()) // 短于5个字符的缩写自动加句点 return shortMonth.length < 5 ? `${shortMonth}.` : shortMonth } // 格式化时使用自定义占位符即可 dayjs('2012-02-01').locale('de').format('Do mmmDot YYYY') // 输出结果:1. Feb. 2012
内容的提问来源于stack exchange,提问作者AlbertMunichMar
相关产品推荐
相关产品推荐

