[英]How to handle large dates with momentjs?
我试图找到两个瞬间对象之间几个月的差异。 我做了如下:
const current = moment()
const future = moment().add('324523546345634563456345','months')
const diff = future.diff(current, 'months')
diff
为0。为什么? 有没有其他方法可以处理324523546345634563456345
这样的大数字?
简短的答案:您的输入超出了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类型。 最长日期大约是275,760年 。 您的意见将需要一年的支持,直到今年为止。 实际上,您的输入大于宇宙的年龄 。
如果确实需要进行这样的计算,则可以使用BigInt
。 您可能必须手动进行计算,因为我认为任何与时间相关的库都不会支持这么大的日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.