You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 10:06:04