为何使用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) vsdd:星期缩写(Sun-Sat)HH:24小时制小时(00-23) vshh:12小时制小时(01-12)YY:两位数年份(18) vsYYYY:四位数年份(2018)
内容的提问来源于stack exchange,提问作者Runtime Terror
相关产品推荐
相关产品推荐

