使用Moment.js计算跨年份日期差返回NaN如何解决
问题根因
你遇到的问题是Moment.js的数组参数日期构造规则导致的:Moment.js采用0起始的月份索引规则,即1月对应数值0,12月对应数值11。当你传入的月份数值超过0-11的范围时,Moment会直接解析为无效日期,调用diff方法自然返回NaN。
同一年内的计算看起来正常,是因为你所有月份参数都多传了1,两个日期的月份偏移量一致,计算差值时刚好抵消了误差,所以结果看起来正确。跨年时你传入了[2019, 12, 25],月份12超出合法范围,日期解析失败,才出现NaN。
解决方案
方案1:修正数组传参的月份数值
将月份参数统一减1,对应Moment的索引规则:
<tr> <th> 9</th> <th>Dr </th> <th>Abel </th> <th>Jack </th> <th>abeljack@outlook.com </th> <th>26 </th> <th>2019-12-25 </th> <th> 2020-01-02</th> <th>{moment([2020, 0, 2]).diff(moment([2019, 11, 25]), "days")}</th> </tr>
修改后计算结果为8,符合预期。
方案2:直接使用日期字符串构造(更推荐)
避免手动处理月份索引的坑,直接传入表格中已有的标准日期字符串即可,可读性更高也不容易出错:
moment('2020-01-02').diff(moment('2019-12-25'), 'days')
内容的提问来源于stack exchange,提问作者Kudah Shambare
相关产品推荐
相关产品推荐

