【问题标题】:Calculate the time difference in minutes between two time values计算两个时间值之间的时间差(以分钟为单位)
【发布时间】:2018-08-16 09:11:42
【问题描述】:

我编写了以下脚本来查找两个时间值之间的时间差,并在差为 10 分钟时执行一个函数。脚本中变量h1、m1、s1为第一次的时、分、秒,h2、s2、m2为第二次。

例如

h1 = 10
m1 = 55
s1 = 00

h2 = 11
m2 = 05
s2 = 00

脚本当前检查 h1 是否等于 h2。如果是,那么它会找到 m2 和 m1 之间的差异。如果该差值为 10,则执行该函数。

//........setting the current time........//
var d1 = new Date();
var h1 = d1.getHours();
var m1 = d1.getMinutes();
var s1 = d1.getSeconds();

//if the hour, minute or second is a single digit number, add a zero before it//
if (h1 < 10) {
    h1 = "0"+ h1;
}

if (m1 < 10) {
    m1 = "0" + m1;
}

if (s1 < 10) {
    s1 = "0" + s1;
}

var now = h1 + ":" + m1 + ":" + s1;

//........setting the target time........//
var d2 = new Date(2018, 8, 16, 11, 05, 00);
var h2 = d2.getHours();
var m2 = d2.getMinutes();
var s2 = d2.getSeconds();

//if the hour, minute or second is a single digit number, add a zero before it//
if (h2 < 10) {
    h2 = "0" + h2;
}

if (m2 < 10) {
    m2 = "0" + m2;
}

if (s2 < 10) {
    s2 = "0" + s2;
}

var time = h2 + ":" + m2 + ":" + s2;

//........Calculating the difference........//
if (h1 == h2) {
    var diff = m2 - m1;
        if ((diff == 10)) {
            document.getElementById("diff").innerHTML = diff;
            move();
    }
}

但是,我意识到这并不总是有效,就像上面的示例时间一样。当小时值不同时,脚本不会计算时间差。有什么办法可以克服这个吗?

【问题讨论】:

标签: javascript html date time


【解决方案1】:

你应该先计算时间差,然后再做逻辑。这样,无论测试结果如何,您都可以始终显示差异。要做到这一点,请转换为一些常见的基础,如秒或分钟,然后格式化适合演示的格式,例如

function getTimeDiff(h1, m1, s1, h2, m2, s2) {
  return diff =  toSeconds(h2, m2, s2) - toSeconds(h1, m1, s1);  
}

function toSeconds(h, m, s) {
  return h*3600 + m*60 + s*1;
}

function secondsToHMS(secs) {
  function z(n){return (n<10? '0':'') + n}
  return z(secs/3600|0) + ':' +
         z((secs%3600)/60|0) + ':' +
         secs%60;
}

// Tests
[[4,23,15, 5,5,8],    // 04:23:15 vs 05:05:08
 [4,23,15, 4,25,8]].  // 04:23:15 vs 04:25:08
  forEach(function(arr) {
    var diff = getTimeDiff(...arr);
    console.log(`Diff of ${secondsToHMS(diff)} is ${diff > 600? 'more':'less'} than 10 minutes`);
 });

【讨论】:

  • 这很好用,谢谢!我玩弄了这些功能并设法以我需要的格式获取脚本。现在只是想弄清楚如何在 for 循环中将上述函数应用于时间数组。
【解决方案2】:

在这里回答Get difference between 2 dates in JavaScript?

var date1 = new Date("7/13/2010");
var date2 = new Date("12/15/2010");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
alert(diffDays);`

【讨论】:

  • 但这给出了两个日期之间的差异,而我的代码正在查看两次之间的差异,特别是以分钟为单位。
  • dates-time是一个对象,可以在date对象中添加时间字段。如果您不添加任何时间字段,则时间为 00:00:00,因此在这种情况下 date1 被视为 07/13/2010 00:00:00
【解决方案3】:

尝试使用parseInt()函数,将0附加到h1、h2、m1和m2后,它被视为字符串。

if (parseInt(h1) == parseInt(h2)) {
    var diff = parseInt(m2) - parseInt(m1);
        if ((diff == 10)) {
            document.getElementById("diff").innerHTML = diff;
            move();
    }
}

【讨论】:

  • 这并不能解决他的问题,时差小于 10 分钟,时间也不一样。试试这个例子:d1 = 2018/08/16 11:00:01 and d2 = 2018/08/16 10:58:00
【解决方案4】:

要计算差异,您可以将“计算差异”注释下方的内容替换为:

//........Calculating the difference........//
if(Math.abs(d1.getTime() - d2.getTime()) <= 600000) {
    // execute your function
}

说明

  • getTime() 函数的 Date 对象返回日期时间戳,即 1970 年 1 月 1 日 00:00:00 UTC 和对象中的日期之间的毫秒数经过。这在使用日期进行计算时更容易使用,而不是分别比较/计算小时、分钟和秒...这也是软件开发中非常常见的做法。
  • 使用此函数,我们计算以毫秒为单位的差异。我使用Math.abs() 以确保此差异始终为正数。这使得下面的比较更容易。
  • 然后,我们只需要检查这个差异是否小于或等于 10 分钟,即 10 * 60 * 1000 = 600000 毫秒。

我们去吧!您现在已经具备调用函数所需的条件。

如果需要更多说明,请随时回复。

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 2021-11-14
    • 1970-01-01
    • 2021-05-12
    • 2020-01-02
    • 2021-01-04
    • 2020-06-08
    • 2014-05-20
    相关资源
    最近更新 更多