【问题标题】:how to calculate "time 1" - "time 2" in JavaScript?如何在 JavaScript 中计算“时间 1”-“时间 2”?
【发布时间】:2015-01-14 22:32:30
【问题描述】:

朋友们,

我想计算两次之间的差异。例如我有

var workedHours = '05:00:00';

var defaultWorkDay = '08:00:00';

所以我需要计算工作时间 - defaultWorkDay 并期望得到“-03:00:00”的结果。

我尝试了 moment.js 但没有成功。

你有什么建议吗?

【问题讨论】:

  • moment.js 应该可以很好地处理这个问题。您可以发布您尝试过的基于 moment.js 的代码吗?
  • 如果您确实尝试过某些东西,您应该发布该代码并说明您期望它如何工作,以及发生了什么。
  • @DeeDee 不,这不是 IMO。
  • 您能否将小时数转换为时间(如 Unix 时间戳),进行算术运算,然后将差值转换为小时数?

标签: javascript datetime datediff


【解决方案1】:

我从未使用过 moment.js ,但我认为这应该适合你:

    var defaultWorkDay = '08:00:00';
    var workedHours = '05:00:00';
    var a = moment.duration(defaultWorkDay);
    var b = moment.duration(workedHours);
    
    console.log( [ b.subtract(a).hours(), b.subtract(a).minutes(), b.subtract(a).seconds() ]
    ) // [-3:0:0]
<script src="http://momentjs.com/downloads/moment.min.js"></script>

http://momentjs.com/docs/#/durations/subtract/

【讨论】:

  • 我认为为这样的基本操作添加 31 KB(缩小)是不必要的。
  • 我修改为也可以使用分钟和秒。
  • 正常工作:var diff = b.subtract(a);var hour = diff.hours();var minute = diff.minutes();var second = diff.seconds();
【解决方案2】:

通过在日期前加上日期(如下所示)将您的小时数转换为带有时间的日期,然后在 Date 对象上使用 .getTime() 进行数学运算。然后将这些毫秒转换为您的小时数,或您想要的任何其他时间单位。

  var date1 = new Date("2000-01-01 05:00:00");
  var date2 = new Date("2000-01-01 08:00:00");
  var msTimeOffset = date1.getTime() - date2.getTime();
  var hourTimeOffset = msTimeOffset / 1000 / 60 / 60;
  expect(hourTimeOffset).toBe(-3); // passes

【讨论】:

    【解决方案3】:

    如果您确定格式始终为 hours:minutes:secnodes...,您可以像 this 一样执行此操作:

    var start = "05:00:00";
    var end = "08:00:00";
    
    var startArr = start.split(':');
    var endArr = end.split(':'); 
    
    var diffInSeconds = 0
        + ( endArr[0] - startArr[0] ) * 3600
        + ( endArr[1] - startArr[1] ) * 60
        + ( endArr[2] - startArr[2] ) ;
    
    console.log ( 'The difference is : ' + diffInSeconds + ' seconds.');
    
    // => The difference is 10800 seconds.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2021-08-26
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      相关资源
      最近更新 更多