Moment Js时间格式化异常 输出时间比实际少22分钟且秒数有偏差
问题根因
你遇到的时间偏差是Moment.js 格式占位符大小写混用导致的,Moment 的时间单位占位符大小写完全独立,对应规则如下:
- 月份类单位统一使用大写
M:M(1-12)、MM(01-12)、MMM(短月份名)、MMMM(完整月份名) - 分钟类单位统一使用小写
m:m(0-59)、mm(00-59) - 秒类单位统一使用小写
s:s(0-59)、ss(00-59) - 毫秒类单位统一使用大写
S:S(0-9)、SS(00-99)、SSS(000-999)
你原代码中的格式串 MMMM DD YYYY HH:MM:SS 里,MM 被解析为当前月份的两位数值、SS 被解析为当前毫秒的前两位数值,直接导致分钟、秒的展示值完全错误,和真实时间产生偏差。
修复方案
替换格式串里的分钟、秒占位符为正确的小写符号即可:
const dated = moment().format("MMMM DD YYYY HH:mm:ss");
通用排查步骤
如果后续使用 Moment.js 遇到时间异常问题,可按以下顺序排查:
- 先核对格式串所有占位符的大小写是否和目标单位匹配,Moment 占位符大小写敏感,写错就会出现完全不符合预期的结果
- 单独输出 Moment 实例的原生属性做校验,比如调用
moment().minutes()、moment().seconds()拿到原生时间值,和格式化后的结果做对比,确认问题出在格式化环节还是时间实例本身 - 排除格式化问题后,再检查运行环境的系统时间、时区配置是否准确
内容的提问来源于stack exchange,提问作者Vamsi Krishna
相关产品推荐
相关产品推荐

