Moment.js解析特定日期时间格式返回‘Invalid date’的问题及解决方法咨询
解决Moment.js解析"MM/DD/YYYY HH:MM:SS A"格式失败的问题
哈哈这个坑我踩过!你的代码解析失败其实是因为格式字符串里的两个错误,严格模式(第四个参数true)下Moment对格式匹配要求非常严格,一点点不对就会返回无效日期:
问题出在这两个格式符上:
HH和A冲突:HH是Moment里的24小时制小时标识(范围00-23),而A是AM/PM的12小时制标识,这两个放在一起逻辑矛盾,解析器直接判定无效。MM和SS用错:MM是月份的标识,分钟应该用mm;SS不是秒的标识,秒需要用小写的ss(大写SS是毫秒的标识)。
修正后的代码
把格式字符串改成MM/DD/YYYY hh:mm:ss A就可以正常解析了:
var someday = moment("09/08/2022 05:46:00 PM", "MM/DD/YYYY hh:mm:ss A", "en-US", true); someday.isValid(); // 现在会返回true console.log(someday.format()); // 输出类似"2022-09-08T17:46:00+08:00"(取决于你的时区)
补充一下关键格式符的区别
为了避免再踩坑,记清楚这几个常用的时间格式符:
- 小时:
HH(24小时制,00-23)、hh(12小时制,01-12) - 月份:
MM(两位数字,01-12) - 分钟:
mm(两位数字,00-59) - 秒:
ss(两位数字,00-59) - 上午/下午:
A(大写,AM/PM)、a(小写,am/pm)
因为你开启了严格模式,所以格式必须和输入字符串完全对应,包括大小写,这也是为什么之前仅解析日期部分能成功——那部分的格式符是正确的。
内容的提问来源于stack exchange,提问作者P_B
相关产品推荐
相关产品推荐

