如何在moment.js中移除格式化日期的AM/PM标识
解决Moment.js日期格式化的AM/PM显示异常与多语言适配问题
嘿,我来帮你搞定这个日期格式化的问题!咱们先把你遇到的两个核心问题拆解清楚:
- 上午时间错误显示PM,下午反而不显示AM/PM标识
- 瑞典语格式正常,但切换到英语后就出问题
问题根源
你当前的代码硬编码了瑞典语(sv)的locale,但需要切换语言时没法动态调整;另外出现AM/PM的异常,大概率是某处不小心用了12小时制的格式符hh(而不是24小时制的HH),或者切换locale时格式串没有同步适配。
你的核心需求很明确:不管用哪种语言,都输出无AM/PM的24小时制时间,同时日期部分适配对应语言的格式。
修正后的代码方案
我给你调整了两个关键地方:
- 把locale改成可传入的参数(默认保留瑞典语,兼容原有逻辑)
- 针对不同locale适配对应的日期格式,同时严格使用24小时制的
HH:mm
// 可传入目标locale,默认使用瑞典语 getUpdatedDate(date, locale = 'sv') { // 根据语言选择对应的格式串 // 英语需要 "月份 日期, 年份, 时间" 的格式,瑞典语是 "日期 月份 年份 时间" const formatPattern = locale === 'en' ? 'MMMM DD, YYYY, HH:mm' : 'DD MMMM YYYY HH:mm'; return moment(date) .locale(locale) // 动态设置语言 .format(formatPattern); }
测试用例
调用这个函数就能得到你想要的结果:
- 英语环境:
getUpdatedDate(new Date('2018-05-23T08:06:00'), 'en')→ 输出May 23, 2018, 8:06 - 瑞典语环境:
getUpdatedDate(new Date('2018-05-23T15:36:00'))→ 输出23 maj 2018 15:36
更灵活的优化方案
如果你不想手动判断locale写格式串,还可以用Moment自带的本地化格式令牌LL,它会自动根据语言适配日期格式:
getUpdatedDate(date, locale = 'sv') { // LL 会自动适配语言:英语是"May 23, 2018",瑞典语是"23 maj 2018" return moment(date).locale(locale).format('LL, HH:mm'); }
这样不管后续加什么语言,都不用改格式串,更省心!
最后别忘了,要确保你已经加载了对应语言的Moment locale文件哦(比如英语的locale需要提前引入)。
内容的提问来源于stack exchange,提问作者Kithma
相关产品推荐
相关产品推荐

