javascript - 在 Javascript 中以毫秒为单位获取时间差异计算
问题描述
我想在Javascript中找到两个毫秒值之间的差异。正如您在下面的快照中看到的,我在 Excel 中计算了两个时间值。我的期望与 JS 代码的计算值完全相同。我尝试了一些代码片段,但我在几秒钟内得到了细微的差别。
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript new Date()</h2>
<p>new Date() creates a new date object with the current date and time:</p>
<p id="demo"></p>
<script>
var d1 = '2020-12-15 01:00:23.788';
var d2 = '2020-12-15 01:00:55.482';
var date1 = new Date(d1);
var date2 = new Date(d2);
//date2 += 500;
//date2 = new Date(date2);
//date2.setMilliseconds(5);
var date1_ms = date1.getTime();
var date2_ms = date2.getTime();
// Calculate the difference in milliseconds
var difference_ms = date2_ms - date1_ms;
//take out milliseconds
difference_ms = difference_ms/1000;
var seconds = Math.floor(difference_ms % 60);
difference_ms = difference_ms/60;
var minutes = Math.floor(difference_ms % 60);
difference_ms = difference_ms/60;
var hours = Math.floor(difference_ms % 24);
var demo = hours + ' hours, ' + minutes + ' minutes, and ' + seconds + ' seconds.' + difference_ms;
document.getElementById("demo").innerHTML = demo;
</script>
</body>
</html>
解决方案
您从毫秒中获取小时、分钟和秒的算法是有缺陷的。您必须在除法之前从差值中减去结果,而不是求模运算的结果。因为如果这样,差异只显示 31 秒,即使差异更大。使用正确的算法查看以下小提琴:
var d1 = "2020-12-15 01:00:23.788";
var d2 = "2020-12-15 01:00:55.482";
var date1 = new Date(d1);
var date2 = new Date(d2);
var date1_ms = date1.getTime();
var date2_ms = date2.getTime();
var difference_ms = date2_ms - date1_ms;
var milliseconds = difference_ms % 1000; // milliseconds that are less than one second
difference_ms = (difference_ms - milliseconds) / 1000; // convert to seconds
var seconds = difference_ms % 60; // seconds that are less than one minute
difference_ms = (difference_ms - seconds) / 60; // convert to minutes
var minutes = difference_ms % 60; // minutes that are less than one hour
difference_ms = (difference_ms - minutes) / 60; // convert to hours
var hours = difference_ms % 24;
document.getElementById("output").innerHTML = hours + "h " + minutes + "m " + seconds + "s " + milliseconds + "ms";
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p id="output"></p>
</body>
</html>
推荐阅读
- node.js - 如何使用 moongose 在当前文档数组中创建唯一键
- linux - sudo:/etc/sudoers.d 归 gid 501 所有,应为 0
- eclipse - 未指定 Eclipse Maven JavaFX ${maven.home}
- javascript - Audiotag 时间控制 (#t=5,6) 第二次不工作
- laravel - 在 Laravel 中编辑多个图像
- flutter - ListView 输出 dataList 2 次
- c++ - 使用 C++20 Concept 约束模板参数
- c# - 使用 ActivePresentation 属性复制幻灯片是否适合 Web 部署?
- python - 复制到新 DataFrame 的行数受现有行数的限制
- griddb - GridDb在执行环境变量命令时抛出匿名执行错误