moment.js使用diff方法返回NaN

文章讲述了开发者在使用moment.js处理时间字符串时遇到NaN值的问题,原因是将月份作为数组元素导致解析错误。解决方案是将时间字符串直接转换为moment对象,而非数字数组。最终,问题得到解决并恢复正常功能。
摘要由CSDN通过智能技术生成

之前写的代码,测试过了上线很长时间了,这两天发现不好使了。发现返回的值就变成了NaN。。。
例子 也是按照moment.js官网给的例子写的,把字符串变成时间数组格式,真是奇了怪了。

原来的代码

const separator = /-|:|\s/g;
let failureBegin = "2023-12-12 12:00:00"
let failureEnd = "2023-12-12 12:00:04"
let faultLast = 0;
let start = moment(failureBegin.split(separator));
let end = moment(failureEnd.split(separator));
faultLast = end.diff(start, "seconds"); 

原因

网上搜索了一下,这个问题的解释是:
当使用一个数字数组创建日期时,月份从零开始,该数组反映了传递给new Date()的参数。所以用12表示月份是无效的。 当前月正好是12月份。。
然后看有人说把数组变成字符串,这样?2023,12,12,12,0,0 试了不行。

最终解决方案:

最终试了把时间字符串变成一个moment对象,diff方法里的参数变成moment对象。像这样:(当然也可以把时间字符串都变成时间戳,两者相减计算出时间差)

let failureBegin = "2023-12-12 12:00:00"
let failureEnd = "2023-12-12 12:00:04"
let faultLast = 0;
let start = moment(failureBegin);
let end = moment(failureEnd);
faultLast = end.diff(start, "seconds"); 

发现就好使了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值