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

IT技术 javascript datetime
2021-02-10 19:28:53

如果我有两个日期,我如何使用JavaScript在几分钟内获得两个日期之间的差异?

6个回答

您可以查看此代码:

var today = new Date();
var Christmas = new Date(today.getFullYear() + "-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 =)");

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

Math.round(((diffMs % 86400000) % 3600000) / 60000); 当差异大于 60 分钟时不起作用
2021-03-13 19:28:53
我在测试这个答案时发现了一个错误:如果在 Date 对象中设置分钟,则 DiffHrs 可能是错误的。例如,如果圣诞节是“12-25-2015 03:55”而今天是“12-25-2015 02:00”,那么hourDiff 是两个小时。应该是一小时。
2021-03-15 19:28:53
它没有正确回答问题,而不是仅计算分钟的差异,而是将差异计算为天、小时和分钟的组合......因此,如果差异是 1 天 1 小时 1 分钟,它将显示 1天 1 小时 1 分钟,而不是 1501 分钟
2021-03-24 19:28:53
重申这不能正常工作,至少几分钟。例如,花了 62 分钟的差异,由于四舍五入,认为是 2 分钟的差异。
2021-03-29 19:28:53
@philk,这就是我如此重视 StackOverflow 的原因。在许多留言板中,答案只是一个超链接。如果是这种情况,我们就不会得到这么好的答案。
2021-04-03 19:28:53

减去 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

@Davatar 谁说他们是一样的?他只是说 12 小时 - 0 小时与 0 小时 - 12 小时相同。
2021-03-12 19:28:53
我认为这是更好的答案,我注意到当差异超过 60 分钟时,接受的答案无法将差异转换为分钟
2021-03-15 19:28:53
叶。或者(Math.floor(seconds/60))+':'+((seconds/60)%60)如果你也需要剩余的秒数
2021-03-16 19:28:53
旧答案,但您不应该使用new Date(string)ISO-8601 格式字符串以外的格式。请参阅为什么 Date.parse 给出不正确的结果?, 或者只使用数字(例如,new Date(2011, 9, 9, 12, 0, 0); 请记住,月份是从 0 开始的)。
2021-03-21 19:28:53
这也是错误的。12:00 不能与 00:00 相同,因为它们相差 12 小时...
2021-03-24 19:28:53
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);
旧答案,但您不应该使用new Date(string)ISO-8601 格式字符串以外的格式。请参阅为什么 Date.parse 给出不正确的结果?, 或者只使用数字(例如,new Date(2011, 9, 9, 12, 0, 0); 请记住,月份是从 0 开始的)。
2021-03-22 19:28:53
这很好,很简单,对我有用。我确实从日期中删除了 .getTime() ,因为在我看来这似乎更合乎逻辑,因为这个想法是比较两个日期。谢谢。
2021-04-06 19:28:53

执行此计算的简单函数:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}
感谢您在函数中的简单封装。然而,在这里我会使用“let”而不是“var”。
2021-03-29 19:28:53

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

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
TypeScript 会给你错误“算术运算的左侧和右侧必须是‘any’、‘number’或枚举类型”。为避免错误,请执行(currDate.getTime() - oldDate.getTime()) / 60000
2021-03-17 19:28:53