moment.js调用minutes()返回0,本地时间格式化分钟丢失问题
解决Moment.js本地时间分钟始终为0的问题
先排查moment对象的创建逻辑
你的问题核心大概率出在moment对象的初始化环节——如果创建时就没正确带入分钟信息,后续无论怎么转本地时间都会返回0。
- 若从字符串解析时间:必须明确指定匹配的格式,避免moment自动解析出错。比如时间字符串是
"2024-05-20 14:35",要这么写:const m = moment("2024-05-20 14:35", "YYYY-MM-DD HH:mm"); - 若从时间戳创建:区分秒级/毫秒级时间戳,秒级要乘以1000,比如
moment(1716186900 * 1000),否则会被截断到整点。
正确获取本地时间的分钟或格式化
确认moment对象本身包含正确分钟后,用以下方式操作:
- 获取分钟数:直接调用
m.local().minutes(),或者m.minutes()(默认返回本地时间的分钟,除非你之前调用过utc()切换到UTC时区) - 格式化带分钟的本地时间:用
m.local().format('hh:mm A')(12小时制,如02:35 PM)或m.format('HH:mm')(24小时制,如14:35),注意mm是分钟的占位符,别写错成大写MM(那是月份)。
验证moment对象的原始数据
如果还是有问题,先打印原始对象确认数据是否正确:
console.log(m.toISOString()); // 输出完整带时区的时间,检查分钟是否存在 console.log(m._d); // 查看内部Date对象,确认分钟值
要是这里的分钟就是0,说明创建moment对象时就丢失了数据,得回到初始化步骤排查。
排查全局时区配置
如果项目里用了moment.tz.setDefault()设置过全局时区,可能导致转换异常。可以临时取消后测试:
moment.tz.setDefault(undefined); console.log(m.local().format('hh:mm'));
内容的提问来源于stack exchange,提问作者After_Sunset
相关产品推荐
相关产品推荐

