JavaScript-获取两个日期之间的分钟


156

如果我有两个日期,我该如何使用JavaScript以分钟为单位获取两个日期之间的差额?


它们是日期对象还是字符串?请举一个示例
situatin

Answers:


204

您可以签出以下代码:

var today = new Date();
var Christmas = new Date("2012-12-25");
var diffMs = (Christmas - today); // milliseconds between now & Christmas
var diffDays = Math.floor(diffMs / 86400000); // days
var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
alert(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Christmas 2009 =)");

var diffMins = Math.floor((...舍弃秒,如果您不想舍入分钟。


7
@philk,这就是为什么我如此重视StackOverflow。在许多留言板上,答案仅仅是一个超链接。如果是这种情况,我们将不会有一个很好的答案。
安德鲁·尼利,2015年

5
测试此答案时,我发现一个错误:DiffHrs可能是错误的如果您在Date对象中设置分钟。例如,如果圣诞节是“ 12-25-2015 03:55”,而今天是“ 12-25-2015 02:00”,则hourDiff是两个小时。应该一个小时。
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);差异大于60分钟时无法正常工作
kuncevic.dev 2015年

3
重申这至少在几分钟内无法正常工作。例如,花费了62分钟,而由于四舍五入的原因,认为相差2分钟。
约旦

6
它无法正确回答问题,而不是仅以分钟为单位计算差额,而是将差额计算为天,小时和分钟的总和...因此,如果差额是1天1小时1分钟,它将显示1 1天1小时1分钟,而不是1501分钟
Akhil Gupta

170

减去2个Date对象可得到以毫秒为单位的差异,例如:

var diff = Math.abs(new Date('2011/10/09 12:00') - new Date('2011/10/09 00:00'));

Math.abs用于能够使用绝对差(因此new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')得出相同的结果)。

将结果除以1000可得到秒数。用60除以分钟。要四舍五入,请使用Math.floorMath.ceil

var minutes = Math.floor((diff/1000)/60);

在此示例中,结果将为720


1
是的 或者类似的东西,(Math.floor(seconds/60))+':'+((seconds/60)%60)如果您也需要剩余的秒数
KooiInc 2011年

4
我认为这是更好的答案,我注意到当差异超过60分钟时,可接受的答案无法将差异转换为分钟
sani

这也是错误的。12:00不能与00:00相同,因为它们相差12小时...
Davatar

1
谁说@Davatar相同?他只是说12小时-0小时等于0小时-12小时。
Mark Ba​​ijens

旧的答案,但是您永远不要使用new Date(string)ISO-8601格式字符串以外的格式。请参阅为什么Date.parse给出不正确的结果?,或仅使用数字(例如new Date(2011, 9, 9, 12, 0, 0);仅记住月份是从0开始的)。
异端猴子

52
var startTime = new Date('2012/10/09 12:00'); 
var endTime = new Date('2013/10/09 12:00');
var difference = endTime.getTime() - startTime.getTime(); // This will give difference in milliseconds
var resultInMinutes = Math.round(difference / 60000);

2
这很简单,很适合我。我确实从日期中删除了.getTime(),因为我认为比较两个日期似乎更合逻辑。谢谢。
2013年

旧的答案,但是您永远不要使用new Date(string)ISO-8601格式字符串以外的格式。请参阅为什么Date.parse给出不正确的结果?,或仅使用数字(例如new Date(2011, 9, 9, 12, 0, 0);仅记住月份是从0开始的)。
异端猴子

46

一个简单的函数来执行此计算:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}

24

那应该以分钟为单位显示两个日期之间的时差。在浏览器中尝试:

const currDate = new Date('Tue Feb 13 2018 13:04:58 GMT+0200 (EET)')
const oldDate  = new Date('Tue Feb 13 2018 12:00:58 GMT+0200 (EET)')


(currDate - oldDate) / 60000 // 64

4
TypeScript将给您错误“算术运算的左手和右手必须是'any','number'或枚举类型”。为避免该错误,请执行(currDate.getTime() - oldDate.getTime()) / 60000
荷马

12

对于那些喜欢少量工作的人

const today = new Date();
const endDate = new Date(startDate.setDate(startDate.getDate() + 7));
const days = parseInt((endDate - today) / (1000 * 60 * 60 * 24));
const hours = parseInt(Math.abs(endDate - today) / (1000 * 60 * 60) % 24);
const minutes = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000 * 60) % 60);
const seconds = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000) % 60); 


2

我在节点中解决了一些类似的问题,这很有趣。

function formatTimeDiff(date1, date2) {
  return Array(3)
    .fill([3600, date1.getTime() - date2.getTime()])
    .map((v, i, a) => {
      a[i+1] = [a[i][0]/60, ((v[1] / (v[0] * 1000)) % 1) * (v[0] * 1000)];
      return `0${Math.floor(v[1] / (v[0] * 1000))}`.slice(-2);
    }).join(':');
}

const millis = 1000;
const utcEnd = new Date(1541424202 * millis);
const utcStart = new Date(1541389579 * millis);
const utcDiff = formatTimeDiff(utcEnd, utcStart);

console.log(`Dates:
  Start   : ${utcStart}
  Stop    : ${utcEnd}
  Elapsed : ${utcDiff}
  `);

/*
Outputs:

Dates:
  Start   : Mon Nov 05 2018 03:46:19 GMT+0000 (UTC)
  Stop    : Mon Nov 05 2018 13:23:22 GMT+0000 (UTC)
  Elapsed : 09:37:02
*/

您可以在https://repl.it/@GioCirque/TimeSpan-Formatting上查看它的运行情况


0

以下代码为我工作,

function timeDiffCalc(dateNow,dateFuture) {
    var newYear1 = new Date(dateNow);
    var newYear2 = new Date(dateFuture);

        var dif = (newYear2 - newYear1);
        var dif = Math.round((dif/1000)/60);
        console.log(dif);

}

0

您可以执行以下操作:

  1. 获取difference of dates(差异将以毫秒为单位)
  2. 转换millisecondsminutesiems/1000/60

代码:

let dateOne = new Date("2020-07-10");
let dateTwo = new Date("2020-07-11");

let msDifference =  dateTwo - dateOne;
let minutes = Math.floor(msDifference/1000/60);
console.log("Minutes between two dates =",minutes);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.