用HH:MM:SS javascript计算两个日期之间的时间差
calculate time difference between two date in HH:MM:SS javascript
我用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_hour、el _minute和el_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;
并使用上面的秒ToHMS函数显示为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
我认为有一个更简单的解决方案。
function dateDiffToString(a, b){
// make checks to make sure a and b are not null
// and that they are date | integers types
diff = Math.abs(a - b);
ms = diff % 1000;
diff = (diff - ms) / 1000
ss = diff % 60;
diff = (diff - ss) / 60
mm = diff % 60;
diff = (diff - mm) / 60
hh = diff % 24;
days = (diff - hh) / 24
return days + ":" + hh+":"+mm+":"+ss+"."+ms;
}
var today = new Date()
var yest = new Date()
yest = yest.setDate(today.getDate()-1)
console.log(dateDiffToString(yest, today))
const dateDiffToString = (a, b) => {
let diff = Math.abs(a - b);
let ms = diff % 1000;
diff = (diff - ms) / 1000;
let s = diff % 60;
diff = (diff - s) / 60;
let m = diff % 60;
diff = (diff - m) / 60;
let h = diff;
let ss = s <= 9 && s >= 0 ? `0${s}` : s;
let mm = m <= 9 && m >= 0 ? `0${m}` : m;
let hh = h <= 9 && h >= 0 ? `0${h}` : h;
return hh + ':' + mm + ':' + ss;
};
这可能是的简单答案
var d1 = new Date(2014,10,11,1,43,28);
var d2 = new Date(2014,10,11,2,53,58);
var date = new Date(d2-d1);
var hour = date.getUTCHours();
var min = date.getUTCMinutes();
var sec = date.getUTCSeconds();
var day = date.getUTCDate() - 1;
console.log(day + ":" + hour + ":" + min + ":" + sec)
更直观,更易于阅读。
function hmsToSeconds(t) {
const [hours, minutes, seconds] = t.split(':')
return Number(hours) * 60 * 60 + Number(minutes) * 60 + Number(seconds)
}
function secondsToHMS(secs) {
return new Date(secs * 1000).toISOString().substr(11, 8)
}
var startTime = '01:43:28';
var endTime = '12:22:46';
console.log(secondsToHMS(hmsToSeconds(endTime) - hmsToSeconds(startTime))); //10:39:18
相关文章:
- 如何在javascript中获取两个日期之间的周六和周日的日期
- 如何用moment.js列出两个日期之间的所有月份
- 两个日期时间选择器
- 如何在JavaScript中比较两个日期
- Javascript两个日期选择器冲突
- 如何从日期范围选择器中获取两个日期
- JavaScript函数,用于计算两个日期之间的年、月和天数
- 再次使用JavaScript计算两个日期之间的天数
- Mongoose查询在两个日期时间之间提取数据
- 在Javascript中计算两个日期之间的工作日,节假日除外
- 两个日期之间的差异
- JavaScript-计算两个日期之间的天数(包括结束日期)
- 在 JavaScript 中单击函数时两个日期类型输入之间的差异的代码
- 如何比较 JavaScript 格式为 2011-jan-21 的两个日期
- 如何在javascript中计算两个日期时间之间的差异
- (Angular+Bootstrap)如何阻止两个日期选择器被同一按钮打开
- 两个日期之间的月份差异,计算月份的最后日期
- 如何在JavaScript中返回两个日期(当前日期和输入日期)之间的字符串差异
- Moment.js-两个日期的天数不同
- 如何在javascript中比较两个日期时间