You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在moment.js中移除格式化日期的AM/PM标识

解决Moment.js日期格式化的AM/PM显示异常与多语言适配问题

嘿,我来帮你搞定这个日期格式化的问题!咱们先把你遇到的两个核心问题拆解清楚:

  • 上午时间错误显示PM,下午反而不显示AM/PM标识
  • 瑞典语格式正常,但切换到英语后就出问题

问题根源

你当前的代码硬编码了瑞典语(sv)的locale,但需要切换语言时没法动态调整;另外出现AM/PM的异常,大概率是某处不小心用了12小时制的格式符hh(而不是24小时制的HH),或者切换locale时格式串没有同步适配。

你的核心需求很明确:不管用哪种语言,都输出无AM/PM的24小时制时间,同时日期部分适配对应语言的格式。

修正后的代码方案

我给你调整了两个关键地方:

  1. 把locale改成可传入的参数(默认保留瑞典语,兼容原有逻辑)
  2. 针对不同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:43:51