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

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

303070 次浏览

你可以签出这段代码:

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
console.log(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Christmas =)");

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

减去两个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。

[编辑2022]增加了一个更完整的演示片段,使用上述知识。

参见

untilXMas();


function difference2Parts(milliseconds) {
const secs = Math.floor(Math.abs(milliseconds) / 1000);
const mins = Math.floor(secs / 60);
const hours = Math.floor(mins / 60);
const days = Math.floor(hours / 24);
const millisecs = Math.floor(Math.abs(milliseconds)) % 1000;
const multiple = (term, n) => n !== 1 ? `${n} ${term}s` : `1 ${term}`;


return {
days: days,
hours: hours % 24,
hoursTotal: hours,
minutesTotal: mins,
minutes: mins % 60,
seconds: secs % 60,
secondsTotal: secs,
milliSeconds: millisecs,
get diffStr() {
return `${multiple(`day`, this.days)}, ${
multiple(`hour`, this.hours)}, ${
multiple(`minute`, this.minutes)} and ${
multiple(`second`, this.seconds)}`;
},
get diffStrMs() {
return `${this.diffStr.replace(` and`, `, `)} and ${
multiple(`millisecond`, this.milliSeconds)}`;
},
};
}


function untilXMas() {
const nextChristmas = new Date(Date.UTC(new Date().getFullYear(), 11, 25));
const report = document.querySelector(`#nextXMas`);
const diff = () => {
const diffs = difference2Parts(nextChristmas - new Date());
report.innerHTML = `Awaiting next XMas 🙂 (${
diffs.diffStrMs.replace(/(\d+)/g, a => `<b>${a}</b>`)})<br>
<br>In other words, until next XMas lasts&hellip;<br>
In minutes: <b>${diffs.minutesTotal}</b><br>In hours: <b>${
diffs.hoursTotal}</b><br>In seconds: <b>${diffs.secondsTotal}</b>`;
setTimeout(diff, 200);
};
return diff();
}
body {
font: 14px/17px normal verdana, arial;
margin: 1rem;
}
<div id="nextXMas"></div>

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 difference = mostDate.diff(minorDate, "minutes");

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

例如:“日”、“小时”、“分钟”等。

http://momentjs.com/docs/

moment.js的CDN在这里:

https://cdnjs.com/libraries/moment.js

谢谢。

编辑:

mostDate和minorDate应该是moment类型。

编辑2:

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

如果你还在寻找一个知名的库来做这项工作,我会推荐date-fns

// How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?
var result = differenceInMinutes(
new Date(2014, 6, 2, 12, 20, 0),
new Date(2014, 6, 2, 12, 7, 59)
)
//=> 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);

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

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

这是我在节点中求解类似问题时得到的一些乐趣。

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处看到它的运行

下面的代码对我有用,

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


}

您可以进行如下操作:

  1. 获取difference of dates(以毫秒为单位)
  2. milliseconds转换为minutes 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);

这是可行的

duration = moment.duration(moment(end_time).diff(moment(start_time)))

它很容易工作:

var endTime = $("#ExamEndTime").val();
var startTime = $("#ExamStartTime").val();


//create date format
var timeStart = new Date("01/01/2007 " + startTime);
var timeEnd = new Date("01/01/2007 " + endTime);
                

var  msInMinute = 60 * 1000;


var difference =  Math.round(Math.abs(timeEnd - timeStart) / msInMinute);


$("#txtCalculate").val(difference);