【问题标题】:How do I subtract hour in javascript?如何在javascript中减去小时?
【发布时间】:2017-05-01 21:28:00
【问题描述】:

我得到下面的结果。

data[11] = "12:05:00";
data[10] = "02:00:00";

我想减去 date[11] 和 date[10],这样它就会将“10 小时 5 分钟”的值返回给我的其他变量并使用 javascript。

到目前为止,我已经尝试过这段代码:

function getAct(data, s) {

  var startTime = data[10];
  var endTime = data[11];

  var s = startTime.split(':');
  var e = endTime.split(':');

  var end = new Date(0, 0, 0, parseInt(e[1], 10), parseInt(e[0], 10), 0);
  var start = new Date(0, 0, 0, parseInt(s[1], 10), parseInt(s[0], 10), 0);

  var elapsedMs = end - start;
  var elapsedMinutes = elapsedMs / 1000 / 60;

  return elapsedMinutes;

}

我只得到了几分钟的结果,结果不正确。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

这很脏,但这是另一种方式

var startTime = "02:00:00";
var endTime = "12:05:00";
var dummyDate = "1/1/2000";
var timeDiff = (new Date(dummyDate + " " + endTime)).getTime() - (new Date(dummyDate + " " + startTime)).getTime();

var seconds = ~~(timeDiff/1000);
var hour = ~~(seconds/60/60);
var min = ~~((seconds - 60*60*hour) / 60);
seconds = ~~(((seconds - 60*60*hour) - min*60));

console.log(hour+":"+min+":"+seconds);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    像这样尝试。它返回正确的分钟数:

    function getAct(data, s) {
    
      var startTime = data[10];
      var endTime = data[11];
    
      var s = startTime.split(':');
      var e = endTime.split(':');
    
      var end = parseInt(e[0])* 60+ parseInt(e[1]);
      var start = parseInt(s[0])*60 + parseInt(s[1]);
    
      var elapsedMs = end - start;
      
      return elapsedMs ;
    
    }
    
    var data=[];
    
    data[11] = "12:05:00";
    data[10] = "02:00:00";
    
    var minutes=getAct(data); 
    
    var hours=parseInt(minutes/60)+" hours "+ minutes%60 +" minutes";

    【讨论】:

    • 不错!结果是正确的,但是如何获得像 '10 hours 5 minutes' 这样的结果?谢谢。
    • var minutes=getAct(data,s); var hours=parseInt(minutes/60)+" hours "+ minutes%60 +" minutes";
    【解决方案3】:

    1) 好吧...您的代码完全是错误的。将方法中间的 start 和 end 放到 console.log 中,看看你在做什么。

    所以,要从您的代码开始,您需要更改:

    var end = new Date(0, 0, 0, parseInt(e[1], 10), parseInt(e[0], 10), 0);
    var start = new Date(0, 0, 0, parseInt(s[1], 10), parseInt(s[0], 10), 0);
    

    到:

    var end = new Date(0, 0, 0, parseInt(e[0], 10), parseInt(e[1], 10), 0);
    var start = new Date(0, 0, 0, parseInt(s[0], 10), parseInt(s[1], 10), 0);
    

    那么您的方法应该在大多数情况下正确返回分钟。然后您可以自己将其转换为小时和分钟。

    2) 但是,您必须记住,适用于日期/时间的 DST 也会发生变化。因此,我强烈建议使用 http://momentjs.com/ 之类的库来处理随时间变化的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 2023-01-12
      • 2016-11-17
      • 2017-11-30
      相关资源
      最近更新 更多