【问题标题】:How to compare two time values by pure JavaScript? [duplicate]如何通过纯 JavaScript 比较两个时间值? [复制]
【发布时间】:2017-05-17 10:40:40
【问题描述】:

我尝试比较两个不同的时间来产生不同的时间。

var start_time;
var end_time;

start_time = $('#startTime').val();
end_time = $('#endTime').val();

收到的值是,

start_time : 5:08 PM
end_time   : 6:08 PM

这里,如何才能得到与这些时间相差 1 小时 的时间?

预期输出:01:00

这可以通过 JavaScript 实现吗?

【问题讨论】:

  • 任何与时间相关的内容,请查看 momentJS
  • @DarrenSweeney 根本不需要。不要为可以通过两行 vanilla JS 完成的琐碎任务推荐不必要且复杂的库。
  • 我不会打电话给 momentJS unnecessary and complicated
  • @DarrenSweeney 我也不会!是一个非常好的库,但在这种情况下不是。在这种情况下,它比用户需要的要复杂得多,因此没有必要。
  • @DarrenSweeney 我在每个关于时间操纵的问题上都看到了这一点,即使是最愚蠢的问题。 “我需要将秒转换为毫秒,我该如何帮忙???”答案:“使用 moment.js”...不,只是 no。真是烦人。

标签: javascript datetime time


【解决方案1】:

希望这个 sn-p 有用

function getDifference(t1, t2) {
  //first splitting by white space. FOr example 5:08 PM will be 5:08 and again splitting by :
  var _t1 = (t1.split(" ")[0].split(":")),
    // converting to number to get the time in minute
    toNum1 = Number(_t1[0]) * 60 + Number(_t1[1]),
    _t2 = (t2.split(" ")[0].split(":")),
    toNum2 = Number(_t2[0]) * 60 + Number(_t2[1]),
    // calulating difference
    dif = toNum2 - toNum1;

  var result = ''
  if (dif % 60 === 0) {
    result = dif % 60 + ':00'
  } else if (dif % 60 < 10) {
    result = Math.floor(dif / 60) + ':0' + dif % 60

  } else if (dif % 60 > 10) {
    result = Math.floor(dif / 60) + ':' + dif % 60
  }
  return result


}

console.log(getDifference("5:08 PM", "6:59 PM"))

【讨论】:

  • 谢谢!它的工作......
  • @ShankarThiyagaraajan 乐于助人。将要求您通过编写测试用例来验证所有场景
  • 抱歉,您错过了基于 AM|PM 的比较。
【解决方案2】:

过滤到时间字符串部分,解析为数字,补偿 AM/PM(为什么不只使用 24 小时模型?)并返回差异数组。

/**
 * Takes time as "... Hours:Minutes ..." and returns array of integers "[hours, minutes]"
 *
 * @param {string} time
 * @returns
 */
function splitTime(time) {
  return /\d{1,2}:\d{1,2}/ig
    .exec(time)
    .pop()
    .split(":")
    .map(function(a) {
      return parseInt(a, 10);
    });
}

function timeDifference(from, to) {
  var t1 = splitTime(from);
  var t2 = splitTime(to);
  if (from.toLowerCase().indexOf("pm") >= 0) {
    t1[0] = t1[0] + 12;
  }
  if (to.toLowerCase().indexOf("pm") >= 0) {
    t2[0] = t2[0] + 12;
  }
  var diff = [t2[0] - t1[0], t2[1] - t1[1]];
  return diff;
}
console.log("Raw return:", timeDifference("5:08 AM", "6:08 AM"));
console.log("Formatting return:", timeDifference("5:08 AM", "6:08 AM").join(":"));

【讨论】:

    【解决方案3】:

    var start_time = "5:08 PM"
    var end_time = "6:10 PM"
    var d1 = Date.parse('1/1/2000 '+start_time)
    var d2 = Date.parse('1/1/2000 '+end_time)
    var diff = (d2-d1)/(60*1000)
    var h = Math.floor(diff/60)
    var m = diff-h*60
    var result = h+":"+("00"+m).slice(-2)
    document.write(result)

    【讨论】:

      【解决方案4】:

      您可以使用纯 javascript,但会更好。一个没有结束的例子是这样的:

          var date1 = new Date();
          date1.setHours('5:08 PM'.split(':')[0]); //Not checking PM or AM
          date1.setMinutes( ....
          return (Math.abs(date1.getTime()-date2.getTime()) / (1000*60*60)) % 24 //returning only hours you will need to add seconds
      

      【讨论】:

      • 你定义date1然后使用d然后神奇地拥有date2
      • 这只是一个简单的开始。显然 date2 是另一个构建日期
      猜你喜欢
      • 2020-06-18
      • 2014-01-03
      • 2019-08-26
      • 2015-12-05
      • 2015-09-18
      • 2018-01-10
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多