JavaScript计算两个日期时间差遇异常,代码结果不正确求助
问题分析与解决方法
你的问题出在计算结果的输出逻辑上:你用了seconds % 60,这只会返回总秒数除以60后的余数——也就是不足1分钟的秒数,而非两个日期之间的总时间差秒数。
看你的测试数据:
- startDate:Fri Jun 30 2023 15:31:51 GMT+0200
- endDate:Fri Jun 30 2023 13:32:05 GMT+0200
实际时间差是1小时59分46秒,总秒数为1*3600 + 59*60 +46 = 7186秒,而7186 % 60正好等于46,这就是你看到错误输出的原因。
修正方案
1. 直接输出总秒数
把输出语句里的seconds % 60改成seconds即可:
testData.forEach((item) => { const { endDate, startDate } = item; // 注意:需确认workflow_instances_timestamp和workflow_instances_modified_at变量是否存在且为true,否则代码不会执行 if (workflow_instances_timestamp && workflow_instances_modified_at) { let startDate_ = new Date(startDate); let endDate_ = new Date(endDate); const seconds = Math.abs(endDate_.getTime() - startDate_.getTime()) / 1000; console.log(startDate, "startDate"); console.log(endDate, "endDate"); console.log(seconds, "总秒数"); // 修改为直接输出总秒数 } });
运行后会输出7186 总秒数,和实际时间差一致。
2. 格式化输出时分秒(可选)
如果需要更直观的时分秒格式,可以把总秒数转成对应的小时、分钟、秒:
testData.forEach((item) => { const { endDate, startDate } = item; if (workflow_instances_timestamp && workflow_instances_modified_at) { let startDate_ = new Date(startDate); let endDate_ = new Date(endDate); const totalSeconds = Math.abs(endDate_.getTime() - startDate_.getTime()) / 1000; const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = totalSeconds % 60; console.log(`${hours}小时${minutes}分钟${seconds.toFixed(0)}秒`); } });
这段代码会输出1小时59分钟46秒,可读性更强。
额外提醒:代码中的workflow_instances_timestamp和workflow_instances_modified_at变量如果未定义或为false,会导致整个计算逻辑不执行,需确认这两个变量的正确性。
内容的提问来源于stack exchange,提问作者Alban denica
相关产品推荐
相关产品推荐

