Node.js中转换12-Oct-2021类格式日期出现moment警告如何解决?
问题原因
Moment 官方出于解析准确性考虑,已经弃用了非 RFC2822/ISO 标准格式的隐式自动解析逻辑,你传入的12-Oct-2021这类自定义格式的字符串没有显式指定解析规则,就会触发该警告。
解决方法
调用 moment 构造函数时,显式传入你输入日期对应的格式字符串即可,你的日期格式日-月份英文缩写-年对应的格式标识符是DD-MMM-YYYY。
修改后代码
const getStartEndWeek = (stringArray) => { const d = new Date(); let year = d.getFullYear() let startWeek = stringArray[0] +'-'+ year; let endWeek = stringArray[1] +'-'+ year; // 显式指定解析格式消除警告 let startWeekDate = moment(startWeek, 'DD-MMM-YYYY'); let endWeekDate = moment(endWeek, 'DD-MMM-YYYY'); // 可选:增加有效性判断,避免返回无效日期 if (!startWeekDate.isValid() || !endWeekDate.isValid()) { throw new Error('日期解析失败,请检查输入格式') } return [startWeekDate,endWeekDate] }
注意事项
- 如果你使用非英文的月份缩写(比如中文的
10月),需要先引入对应 moment 语言包并设置 locale 后再解析,否则会解析失败。 - 现有代码直接取当前年份拼接的逻辑存在边界问题:如果处理的是跨年的周日期(比如当前是2024年1月,要处理的是2023年12月的周数据),直接拼接当前年会得到错误的日期,可根据业务场景补充跨年逻辑判断。
内容的提问来源于stack exchange,提问作者Sahal Nurain
相关产品推荐
相关产品推荐

