首页 > 解决方案 > 在 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>

标签: javascript

解决方案


您从毫秒中获取小时、分钟和秒的算法是有缺陷的。您必须在除法之前从差值中减去结果,而不是求模运算的结果。因为如果这样,差异只显示 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>


推荐阅读