Javascript:找到两个时间之间的时差'不涉及日期的字符串

时间:2017-03-20 15:54:07

标签: javascript datetime time

我有两个<input type="time">。默认情况下,每个输入都将时间值收集为字符串。例如,"08:30"

如何将此字符串转换为可以启用计算的对象?是否有可能避免在这种方法中使用date

最后,我想计算两个time字符串之间的差异,然后在分钟中返回结果。例如,08:0009:00的预期回报值为60分钟。

3 个答案:

答案 0 :(得分:2)

就像你只有笔和纸一样:

  • 12:45 =&gt; 12×60 + 45 = 765分钟
  • 08:30 =&gt; 8×60 + 30 = 510分钟
  • 765 - 510 = 255
  • 整数除法:255/60 = 4小时
  • 剩余:255 - 60×4 = 15分钟
  • 结果:04:15

您可以使用正则表达式从字符串解析:

var parts = "08:45".match(/^(\d+):(\d+)$/);
console.log(+parts[1], +parts[2], +parts[1] * 60 + +parts[2]);

...并且格式化回字符串也不是很困难。

答案 1 :(得分:0)

假设您想使用24小时时钟:

function minutesBetween (a, b) {
  return Math.abs(toMinutes(b) - toMinutes(a))
}

function toMinutes (time) {
  time = /^(\d{1,2}):(\d{2})$/.exec(time)
  return time[1]*60 + +time[2]
}

console.log(minutesBetween('8:30', '9:30')) //=> 60

答案 2 :(得分:0)

一般来说,我建议使用使用自定义函数的Date,但只是针对您的情况,这是示例函数:

&#13;
&#13;
const timeStart = "8:00:00";
const timeEnd   = "8:10:00";
//Handles only time with format in hh:mm or hh:mm:ss
//For more complicated cases use Date 
function diff(start, end) {
    const startMinutes = getMinutes(start);
    const endMinutes   = getMinutes(end);
    return endMinutes - startMinutes
}

function getMinutes(strTime) {
    const time = strTime.split(':');
    return (time[0] * 60 + time[1]*1);
}

alert(diff(timeStart, timeEnd));
&#13;
&#13;
&#13;

请注意,此函数不负责仅验证计算的时差。您应验证输入