JavaScript中两个日期之间的分钟和小时差异

10

我想找出两个日期之间的差异。我尝试了这段代码,但它给我错误的值。我想获得两个日期之间的总分钟数,所以我将小时转换为分钟,并加到分钟中。

var hourDiff = timeEnd - timeStart;
var diffHrs = Math.round((hourDiff % 86400000) / 3600000);
var diffMins = Math.round(((hourDiff % 86400000) % 3600000) / 60000);
diffMins = diffMins + (diffHrs * 60);

这里的timeEndMon Jan 01 2007 11:30:00 GMT+0530 (India Standard Time)

timeStartMon Jan 01 2007 11:00:00 GMT+0530 (India Standard Time)

如果我得到的小时差为1,那么它应该是0,而我得到的分钟数是30,这是正确的。但是小时应该是0。我在这里做错了什么吗?

8个回答

28

尝试以下代码(使用毫秒作为初始单位)

var timeStart = new Date("Mon Jan 01 2007 11:00:00 GMT+0530").getTime();
var timeEnd = new Date("Mon Jan 01 2007 11:30:00 GMT+0530").getTime();
var hourDiff = timeEnd - timeStart; //in ms
var secDiff = hourDiff / 1000; //in s
var minDiff = hourDiff / 60 / 1000; //in minutes
var hDiff = hourDiff / 3600 / 1000; //in hours
var humanReadable = {};
humanReadable.hours = Math.floor(hDiff);
humanReadable.minutes = minDiff - 60 * humanReadable.hours;
console.log(humanReadable); //{hours: 0, minutes: 30}

JSFiddle: http://jsfiddle.net/n2WgW/


这归结于我所提出的相同建议:“使用Math.floor()”。 尝试解释为什么你的答案有效,而不仅仅是在答案中倾倒一些代码。 - Cerbrus
@Cerbrus 是的,没错,这与 Math.floor 有关。我的回答详细阐述了毫秒如何转换为秒、分钟和小时。就是这样。 - strah
它没有解释为什么这段代码会产生用户想要的答案。你只是使用了不同的方法来获取数据。 - Cerbrus

4

试试这个:

var startDate = new Date('Jan 01 2007 11:00:00');
var endDate = new Date('Jan 01 2007 11:30:00');
var starthour = parseInt(startDate.getHours());
var endhour = parseInt(endDate.getHours());

if(starthour>endhour){
    alert('Hours diff:' + parseInt(starthour-endhour));
}
else{
    alert('Hours diff:' + parseInt(endhour-starthour));
}

以下是可运行的代码片段


如果你想要移除一个数字的小数部分,使用Math.floor()代替parseInt()。(这基本上就是我的答案) jsperf测试 - Cerbrus

4

尝试:

var diffHrs = Math.floor((hourDiff % 86400000) / 3600000);

Math.round函数将0.5小时的差距四舍五入为1。如果您只想在小时变量中获得“完整”的小时数,则可以使用Math.floor()函数删除变量中的所有分钟部分。


1
你可以尝试这个:-
function diff_hours(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60 * 60);         // For Hours
  //diff /= (60);          For Minutes
  return Math.abs(Math.round(diff));

 }

dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));            // you will get '24' hours


dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 13, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));           // you will get '3' hours

1
如果您确信时间差不到24小时,以下内容可行。
var timeStart= new Date('2015-01-01 03:45:45.890');
var timeEnd = new Date('2015-01-01 05:12:34.567');
var timeDiff = new Date(timeEnd.getTime() - timeStart.getTime());
var humanTime = timeDiff.toISOString().substring(11, 23);
var diffHours = timeDiff.toISOString().substring(11, 12);

0

您可以通过以下方式获取小时、分钟和秒钟的时间差,就像倒计时一样:

var diff = EndedTime - StartedTime;
var hours   = Math.floor(diff / 3.6e6);
var minutes = Math.floor((diff % 3.6e6) / 6e4);
var seconds = Math.floor((diff % 6e4) / 1000);
var duration = hours+":"+minutes+":"+seconds;

希望这能帮到你。谢谢。

0
var timeDiff = function (date1, date2) {
        var a = new Date(date1).getTime(),
            b = new Date(date2).getTime(),
            diff = {};

        diff.milliseconds = a > b ? a % b : b % a;
        diff.seconds = diff.milliseconds / 1000;
        diff.minutes = diff.seconds / 60;
        diff.hours = diff.minutes / 60;
        diff.days = diff.hours / 24;
        diff.weeks = diff.days / 7;

        return diff;
    }

0
你可以像下面这样以小时和分钟格式获取时间差
const startTime = new Date(event.startTime);
const endTime = new Date(event.endTime);
const diff = endTime.getTime() - startTime.getTime();
const hrDiff = diff / 3600 / 1000; // 1.555555
const totalHours = parseFloat((hrDiff).toFixed(2)); // 1.5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接