使用Moment.js转换指定格式日期字符串生成无效日期,如何解决?
问题排查与解决
嘿,我一眼就发现问题所在啦!你在Moment.js的格式字符串里用错了关键的格式符~
错误原因
在Moment.js的格式规则里,大写的MM是用来匹配月份的(比如01代表1月),而你要匹配的是时间里的分钟,得用小写的mm;另外规范来说,秒数的格式符应该是小写的ss(虽然如果你的秒数是两位数字,用SS不会直接导致无效,但不符合Moment的格式规范)。
你的原代码里用了HH:MM:SS,这会让Moment把字符串里的分钟部分当成月份来解析,自然就生成了无效日期。
修正后的代码
把格式字符串里的MM改成mm,SS改成ss就可以了:
const date = moment(stringDate, 'YYYY-MM-DD HH:mm:ss'); console.log(date);
额外小技巧
- 你可以用
date.isValid()来快速验证解析后的日期是否有效:console.log(date.isValid()); // 返回true表示解析成功 - 如果需要转换成原生JavaScript Date对象,可以调用
date.toDate():const nativeDate = date.toDate();
关键格式符回顾(避免再踩坑)
YYYY:4位完整年份(如2024)MM:两位月份(01-12)DD:两位日期(01-31)HH:24小时制的小时(00-23)mm:两位分钟(00-59)ss:两位秒数(00-59)
内容的提问来源于stack exchange,提问作者slipperypete
相关产品推荐
相关产品推荐

