javascript - 计算 HH :MM:SS javascript 中两个日期之间的时间差

标签 javascript date datetime timer date-difference

我用 JavaScript 创建了一个计时器应用程序。 首先,它使用当前的 UTC 日期来初始化计时器并提供一些引用。这是代码

on_timer: function(e) {
            var self = this;
            if ($(e.target).hasClass("pt_timer_start")) {
                var current_date = this.get_current_UTCDate();
                this.project_timesheet_db.set_current_timer_activity({date: current_date});
                this.start_interval();
                this.initialize_timer();
                this.$el.find(".pt_timer_start,.pt_timer_stop").toggleClass("o_hidden");

现在,一旦计时器启动,经过一段时间后,计时器就会引用上面的 on_timer: function(e) 函数经过一些时间。

这个函数是

start_interval: function() {
            var timer_activity = this.project_timesheet_db.get_current_timer_activity();
            var self = this;
            this.intervalTimer = setInterval(function(){
                self.$el.find(".pt_duration").each(function() {
                    var el_hour = $(this).find("span.hours");
                    var el_minute = $(this).find("span.minutes");
                    var minute = parseInt(el_minute.text());
                    if(minute >= 60) {
                        el_hour.text(_.str.sprintf("%02d", parseInt(el_hour.text()) + 1));
                        minute = 0;
                    }
                    el_minute.text(_.str.sprintf("%02d", minute));
                    var el_second = $(this).find("span.seconds");
                    var seconds = parseInt(el_second.text()) + 1;
                    if(seconds > 60) {
                        el_minute.text(_.str.sprintf("%02d", parseInt(el_minute.text()) + 1));
                        seconds = 0;
                    }
                    el_second.text(_.str.sprintf("%02d", seconds));
                });
            }, 1000);
        },

现在,考虑 el_hourel_monthel_seconds 如何计算初始化时间和当前计时器值之间的时间差(以 HH:MM 为单位) :SS 方式。

提前感谢您的帮助

最佳答案

要将 H:M:S 转换为秒,您可以使用一个简单的函数,例如:

// Convert H:M:S to seconds
// Seconds are optional (i.e. n:n is treated as h:s)
function hmsToSeconds(s) {
  var b = s.split(':');
  return b[0]*3600 + b[1]*60 + (+b[2] || 0);
}

然后将秒转换回 HMS:

// Convert seconds to hh:mm:ss
// Allow for -ve time values
function secondsToHMS(secs) {
  function z(n){return (n<10?'0':'') + n;}
  var sign = secs < 0? '-':'';
  secs = Math.abs(secs);
  return sign + z(secs/3600 |0) + ':' + z((secs%3600) / 60 |0) + ':' + z(secs%60);
}

var a = '01:43:28';
var b = '12:22:46';

console.log(secondsToHMS(hmsToSeconds(a) - hmsToSeconds(b)));  // -10:39:18
console.log(secondsToHMS(hmsToSeconds(b) - hmsToSeconds(a)));  //  10:39:18

您可能想要缩写函数名称:

toHMS(toSec(a) - toSec(b));  // -10:39:18

请注意,这不包括时间可能跨越夏令时边界的情况。为此,您需要完全限定的日期,包括年、月和日。使用这些值创建日期对象,找出差异,转换为秒并使用 secondsToHMS 函数。

编辑

问题标题提到了日期,但内容似乎只提到了小时、分钟和秒的字符串。

如果您有 Date 对象,您可以使用以下方法获取它们之间的差异(以毫秒为单位):

var diffMilliseconds = date0 - date1;

并转换为秒:

var diffSeconds = diffMilliseconds / 1000;

并使用上面的 secondsToHMS 函数显示为 HH:MM:SS:

secondsToHMS((date0 - date1) / 1000);

例如

var d0 = new Date(2014,10,10,1,43,28);
var d1 = new Date(2014,10,10,12,22,46);

console.log( secondsToHMS((d0 - d1) / 1000));  // -10:39:18

关于javascript - 计算 HH :MM:SS javascript 中两个日期之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26580509/

相关文章:

mysql - DATETIME VS INT 用于存储时间?

r - 是否可以使用 HH :MM:SS format? 打印持续时间

JavaScript:解码 PHP json_encode 响应

javascript - 在使用 jQuery 扩展 DIV 时将高度设置为自动

javascript - 使用 RegEx 进行 JavaScript 字符串参数编码

javascript 多次点击 显示隐藏

mysql - 如何使用日期范围过滤 mysql 查询

c - 最初和 sleep 结束时在 C 中打印时间

ruby-on-rails - 在 Rails 或一般的 Ruby 中,我如何知道日期时间字符串是否对应于具有 DST 或不具有 DST 的日期时间?

mysql - Powershell - 将日期格式修改为 CSV 列中的值