【问题标题】:Javascript: finding the time difference between two 'time' strings without involving dateJavascript:在不涉及日期的情况下查找两个“时间”字符串之间的时间差
【发布时间】:2017-03-20 15:54:07
【问题描述】:

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

我怎样才能把这个字符串转换成一个可以进行计算的对象?是否可以避免在这种方法中使用date

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

【问题讨论】:

  • 我会为某个任意日期使用 Date 实例,但严格来说(由于夏令时转换之类的原因),两个时间表达式之间的差异确实取决于您所谈论的日期。跨度>
  • 您可以创建自己的对象并在: 上拆分字符串并将值转换为数字,还取决于您的时间是24 小时还是12 小时
  • 如果我可以问你为什么不使用date?使用像momentjs这样的库可以吗?其他一切都将导致重新发明轮子,并且在计算时间的边缘情况上做更多的工作恕我直言。
  • 嗯...您确定差异不是 23 小时吗?不知道我的意思是什么?如果我问你23:3000:30 之间的区别怎么办?我认为唯一可以同意的是,如果时间正好相隔 12 小时09:0003:00 是 12 小时,无论你从哪一边看。关键是,您需要知道哪个值在前,因为时间很容易超过午夜。

标签: javascript datetime time


【解决方案1】:

就好像你只有笔和纸一样:

  • 12:45 => 12 × 60 + 45 = 765 分钟
  • 08:30 => 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]);

...格式化回字符串也应该不是很困难。

【讨论】:

    【解决方案2】:

    假设您想使用 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

    【讨论】:

      【解决方案3】:

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

      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));

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-16
        • 2018-10-08
        • 1970-01-01
        • 2016-11-30
        • 2019-04-17
        • 2017-09-14
        相关资源
        最近更新 更多