【问题标题】:How to handle large dates with momentjs?如何使用 momentjs 处理大日期?
【发布时间】:2019-10-16 18:24:57
【问题描述】:

我试图找出两个矩对象之间的月差。我做了如下:

const current = moment()
const future = moment().add('324523546345634563456345','months')
const diff = future.diff(current, 'months')

diff 显示为 0。这是为什么呢?有没有不同的方法来处理像324523546345634563456345 这样的大数字?

【问题讨论】:

    标签: javascript date time momentjs


    【解决方案1】:

    简短回答:您的输入超出了 JavaScript 内置整数和日期类型的限制。要对如此大的数字进行计算,请使用类型BigInt。 (MomentJS 等大多数日期库不支持BigInt,原因之一是常规整数提供了合理的日期范围。)


    JavaScript 内置数字可以表示的最大整数是9,007,199,254,740,991。浮点数要高得多,但对于这种类型的用例可能没有意义(浮点间隙会太多)。

    您的输入:324,523,546,345,634,563,456,345 比 JavaScript 内置整数支持的数量级大很多。这甚至在考虑将几个月转换为毫秒之后的额外数量级之前。

    坦率地说,我很惊讶结果是 0 而不是 NaN

    此外,我相信 MomentJS 内部使用了内置的 JavaScript Date 类型。最大日期大约是year 275,760。您的意见将需要一年的支持,今年已经过去了。事实上,你的输入大于the age of the universe

    如果你真的需要做这样的计算,你可以使用BigInts。您可能必须手动进行计算,因为我认为任何与时间相关的库都不会支持如此大的日期。

    【讨论】:

    • 我认为片刻的持续时间可以处理大量数据。不确定为什么存在差异。
    猜你喜欢
    • 2016-02-15
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-03
    • 2015-10-05
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多