【问题标题】:Get time diff calculation with miliseconds in Javascript在 Javascript 中以毫秒为单位获取时间差异计算
【发布时间】:2021-01-21 08:35:43
【问题描述】:

我想在 Javascript 中找到两个毫秒值之间的差异。正如您在下面的快照中看到的,我在 Excel 中计算了两个时间值。我的期望与 JS 代码的计算值完全相同。我尝试了一些代码 sn-p,但我在几秒钟内得到了细微的差别。

  <!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>

【问题讨论】:

  • 你的代码是正确的,你到底想做什么?
  • 毫秒与Excel相比是不一样的。
  • 你半小时前才问过这个问题。请不要创建这种不必要的重复,在这种情况下,您的第一个问题下的讨论可以很容易地在这里继续-

标签: javascript


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正如你已经问过这个 question 。如果这是相同的问题,那么以下是代码。

    function splitInNumberArray(str) {
      return str
        .replace(/(:|\.)/g, " ")
        .split(" ")
        .map((x) => parseInt(x));
    }
    
    function convertToMilliseconds(timeArray) {
      return (
        timeArray[0] * 60 * 60 * 1000 +
        timeArray[1] * 60 * 1000 +
        timeArray[2] * 1000 +
        timeArray[3]
      );
    }
    
    function msToTime(duration) {
      var milliseconds = parseInt((duration % 1000) / 100),
        seconds = Math.floor((duration / 1000) % 60),
        minutes = Math.floor((duration / (1000 * 60)) % 60),
        hours = Math.floor((duration / (1000 * 60 * 60)) % 24);
    
      hours = hours < 10 ? "0" + hours : hours;
      minutes = minutes < 10 ? "0" + minutes : minutes;
      seconds = seconds < 10 ? "0" + seconds : seconds;
    
      return hours + ":" + minutes + ":" + seconds + "." + milliseconds;
    }
    
    // This function is taken from https://stackoverflow.com/questions/19700283/how-to-convert-time-milliseconds-to-hours-min-sec-format-in-javascript
    function parseDuration(duration) {
      let remain = duration;
    
      let hours = Math.floor(remain / (1000 * 60 * 60));
      remain = remain % (1000 * 60 * 60);
    
      let minutes = Math.floor(remain / (1000 * 60));
      remain = remain % (1000 * 60);
    
      let seconds = Math.floor(remain / 1000);
      remain = remain % 1000;
    
      let milliseconds = remain;
    
      return {
        hours,
        minutes,
        seconds,
        milliseconds,
      };
    }
    
    function minTwoDigits(n) {
      return (n < 10 ? "0" : "") + n;
    }
    
    //********************************
    
    const time1 = "01:00:55.482";
    const time2 = "01:00:23.788";
    
    const numberArray1 = splitInNumberArray(time1);
    const numberArray2 = splitInNumberArray(time2);
    
    const msTime1 = convertToMilliseconds(numberArray1);
    const msTime2 = convertToMilliseconds(numberArray2);
    
    const diff = msTime1 - msTime2;
    const { hours, minutes, seconds, milliseconds } = parseDuration(diff);
    console.log(
      `${time1} - ${time2} = ${minTwoDigits(hours)}:${minTwoDigits(
        minutes
      )}:${minTwoDigits(seconds)}.${milliseconds}`
    );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多