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

JavaScript-获取两个日期之间的分钟数,javascript,datetime,Javascript,Datetime,如果我有两个日期,如何使用以分钟为单位计算两个日期之间的差异?您可以签出以下代码: var today=新日期(); var圣诞节=新日期(“2012-12-25”); var diffMs=(圣诞节-今天);//从现在到圣诞节之间的毫秒 var diffDays=数学楼层(diffMs/86400000);//天 var diffHrs=数学楼层((diffMs%86400000)/3600000);//小时 var diffMins=数学舍入((diffMs%86400000)%36000

如果我有两个日期,如何使用以分钟为单位计算两个日期之间的差异?

您可以签出以下代码:

var today=新日期();
var圣诞节=新日期(“2012-12-25”);
var diffMs=(圣诞节-今天);//从现在到圣诞节之间的毫秒
var diffDays=数学楼层(diffMs/86400000);//天
var diffHrs=数学楼层((diffMs%86400000)/3600000);//小时
var diffMins=数学舍入((diffMs%86400000)%3600000)/60000);//会议记录

警报(diffDays+“days”、+diffHrs+“hours”、+diffMins+“2009年圣诞节前分钟=”)减去2个日期对象会得到以毫秒为单位的差值,例如:

var diff = Math.abs(new Date('2011/10/09 12:00') - new Date('2011/10/09 00:00'));
Math.abs
用于使用绝对差(因此
新日期('2011/10/09 00:00')-新日期('2011/10/09 12:00')
给出相同的结果)

将结果除以1000得到秒数。除以60就得到了分钟数。使用
Math.floor
Math.ceil
将四舍五入到整分钟:

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

在本例中,结果为720,这是一个执行此计算的简单函数:

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);
function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}

使用moment.js可以轻松解决此问题,如以下示例所示:

var差=mostDate.diff(minorDate,“分钟”)

第二个参数可以更改为其他参数,请参阅moment.js文档

e、 g.:“天”、“小时”、“分钟”等

此处提供了适用于矩的CDN.js:

谢谢

编辑:

mostDate和minorDate应为力矩类型

编辑2:

对于那些在2020+阅读我答案的人来说,momentjs现在是一个遗留项目

如果你仍然在寻找一个知名的图书馆来做这项工作,我会推荐你


对于那些喜欢与小数字打交道的人

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); 

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

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

这是我在node中解决类似问题的一些乐趣

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
*/

您可以在

上看到它的运行,下面的代码适用于我

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);

}
您可以执行以下操作:

  • 获取日期差异(差异以毫秒为单位)
  • 毫秒
    转换为
    分钟
    i-e
    ms/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);
    

    它们是日期对象还是字符串?请举一个例子。或者类似于
    (Math.floor(seconds/60))+':“+((seconds/60)%60)
    如果您需要剩余的秒数,我认为这是更好的答案,我注意到当差值超过60分钟时,已接受的答案无法将差值转换为分钟。这也是错误的。12:00不能和00:00一样,因为这是12小时的差异…@Davatar谁说他们是一样的?他只是说12小时-0小时与0小时-12小时是相同的。旧答案,但您永远不应该将
    新日期(字符串)
    与ISO-8601格式字符串以外的格式一起使用。请参阅,或仅使用数字(例如,
    新日期(2011,9,9,12,0,0)
    ;请记住月份是以0为基础的)。这很好,很简单,对我很有用。我确实从日期中删除了.getTime(),因为我觉得这更符合逻辑,因为我的想法是比较这两个日期。谢谢。旧的答案,但是您不应该将
    新日期(字符串)
    与ISO-8601格式字符串以外的格式一起使用。请参阅,或仅使用数字(例如,
    新日期(2011,9,9,12,0,0)
    ;请记住月份是以0为基础的)。@philk,这就是我如此重视StackOverflow的原因。在许多留言板中,答案只是一个超链接。如果是这样的话,我们就不会有这么好的答案。我在测试这个答案时发现了一个错误:如果在Date对象中设置分钟,DiffHrs可能是错误的。例如,如果圣诞节是“12-25-2015 03:55”,而今天是“12-25-2015 02:00”,则小时数为两小时。应为一小时。
    数学轮((diffMs%86400000)%3600000)/60000)在差异大于60分钟时不起作用重申此操作不正常,至少持续分钟。例如,它花了62分钟的时间差,由于四舍五入,认为它是2分钟的差。它没有正确回答问题,而是将差分计算为天、小时和分钟的组合……因此,如果差分为1天1小时1分钟,它将显示1天1小时1分钟,而不是1501分钟TypeScript将显示错误“算术运算的左侧和右侧必须是'any'、'number'或enum类型”。要避免错误,请执行
    (currDate.getTime()-oldDate.getTime())/60000
    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);