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

为何使用moment.js格式化日期时间时会多出3分钟?

问题原因分析与解决方案

哈哈,这个坑我之前也踩过!别慌,这是个格式符混淆的典型问题,跟moment的时区处理没关系,纯粹是格式字符串写错了~

核心原因

Moment.js的格式符是严格区分大小写的:

  • 大写的MM代表的是两位数的月份(比如3月就是03)
  • 小写的mm才是两位数的分钟(比如0分就是00)

你指定的格式串是"YYYY/MM/DD HH:MM",这里的最后一个MM被moment解析成了月份,而不是分钟!你的原日期是3月25日,月份是03,所以时区转换后的小时是08,再加上被当成分钟的月份03,就出现了08:03这个诡异的结果。

而默认的format()方法用的是标准ISO格式,它自动用对了分钟的格式符,所以输出的是正确的08:00。

修正后的代码

把格式串里的MM改成mm就可以了:

const withoutFormat = moment("2018-03-25T06:00:00Z").format();
const withFormat = moment("2018-03-25T06:00:00Z").format("YYYY/MM/DD HH:mm");
// withFormat 会输出 "2018/03/25 08:00",和预期一致

补充几个容易搞混的格式符

为了避免再踩类似的坑,给你列几个高频混淆的格式符:

  • DD:两位数的日期(01-31) vs dd:星期缩写(Sun-Sat)
  • HH:24小时制小时(00-23) vs hh:12小时制小时(01-12)
  • YY:两位数年份(18) vs YYYY:四位数年份(2018)

内容的提问来源于stack exchange,提问作者Runtime Terror

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:25:27