Moment格式化标准日期字符串返回'invalid date'原因咨询
报错原因
- 输入字符串不符合严格ISO 8601格式要求:你提供的输入值
2021-11-2T10:20:00+01:00中,日期段的日为单数字2,严格ISO 8601规范要求月、日必须为两位补零格式,对应位置应为02。如果该字符串是Moment.js生成的,说明生成时使用的格式符用了代表单数字日的D,而非代表两位日的DD。 - Moment.js默认解析逻辑容错性低:未指定解析格式时,Moment.js首先会尝试按照严格ISO 8601规则解析字符串,解析失败后会 fallback 到浏览器原生
Date接口解析,不同浏览器的原生日期解析规则存在差异,很容易返回无效日期对象。
修复方案
方案1:统一输入字符串格式
将输入字符串的日补为两位,调整为2021-11-02T10:20:00+01:00即可直接正常解析。
方案2:解析时指定匹配的格式规则
如果无法修改输入的源字符串,调用Moment时主动传入和输入格式匹配的解析规则即可:
const input: string = '2021-11-2T10:20:00+01:00'; // 格式参数中用M匹配1/2位月份、D匹配1/2位日期,Z匹配时区 const dateIns = moment(input, 'YYYY-M-DTHH:mm:ssZ', true); const date: string = dateIns.format('YYYY-MM-DD'); const time: string = dateIns.format('HH:mm');
第三个参数
true代表开启严格解析,避免Moment自动容错导致不符合预期的解析结果。
内容的提问来源于stack exchange,提问作者Ewan
相关产品推荐
相关产品推荐

