【问题标题】:Moment.js date difference is NaNMoment.js 日期差为 NaN
【发布时间】:2026-01-20 17:10:01
【问题描述】:

我正在尝试在 React 中构建一个应用程序,其中用户传递 2 个日期,系统将返回 2 个日期之间的持续时间(以天为单位)。我使用了 Moment.js 库,它在同一年内可以正常工作几天,但在不同年份的日期返回 Nan。以下是我的脚本:

<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, 1, 2]).diff(moment([2019, 12, 25]), "days")}</th>
</tr>

我该怎么做才能对其进行排序?

【问题讨论】:

标签: reactjs date momentjs


【解决方案1】:

当您使用一个数字数组创建日期时,月份从零开始,该数组反映了传递给new Date() 的参数。所以使用 12 不是月份的有效数字。

const date1 = moment([2020, 1, 2]);
const date2 = moment([2019, 12, 25]) // null, month can not be greater than 11
date1.diff(date2, "days") // NaN

您可以将日期作为字符串传递给moment。 moment 将为您解析日期字符串。

来自Moment.js

当从字符串创建时刻时,我们首先检查字符串是否 匹配已知的 ISO 8601 格式,然后我们检查字符串是否匹配 RFC 2822 日期时间格式在下降到新的回退之前 如果找不到已知格式,则日期(字符串)。


const date1 = moment("2020, 1, 2");
const date2 = moment("2019, 12, 25");
date1.diff(date2, "days") // 8 days

【讨论】: