jQuery Datatables调用Moment.js报invalid date无效日期错误如何解决
问题原因分析
- 格式不匹配:你的
data.planning_deadline存储的日期格式为DD-MM-YYYY(示例值为21-10-2021),但调用moment解析时指定的格式是DD-MM-YYYY HH:mm:ss,多了时分秒的匹配规则,导致moment无法正确解析日期,控制台日志中的_isValid: false就是解析失败的明确标识。 - 逻辑顺序错误:代码先执行日期解析,再判断
data.planning_deadline是否为空,当data.planning_deadline是空值时,会直接生成无效的moment对象,后续调用diff方法也会出现异常,日志中的_i: ""就对应空值解析的场景。
修复方案
调整判断顺序,同时对齐日期解析格式即可,修复后代码如下:
rowCallback: function ( row, data ) { // 先过滤无效场景,再执行日期解析 if (data.planning_deadline != "" && data.planning_afgehandeld == 0) { // 解析格式和实际值格式对齐 var daysleft = moment(data.planning_deadline, 'DD-MM-YYYY'); var now = moment(); if ( daysleft.diff(now, 'days') <= 0 ){ $('td:eq(0)', row).css('background-color', ' rgba(255, 0, 0, 0.2)'); } } }
如果需要兼容部分带时分秒的日期值,可以给moment传入多个解析格式,它会自动匹配可用的规则:var daysleft = moment(data.planning_deadline, ['DD-MM-YYYY', 'DD-MM-YYYY HH:mm:ss']);
内容的提问来源于stack exchange,提问作者Martin4523
相关产品推荐
相关产品推荐

