JavaScript - получите минуты между двумя датами

156

Если у меня есть две даты, как я могу использовать JavaScript, чтобы получить разницу между двумя датами в минутах?

Джон
источник
это объекты даты или просто строки? приведите пример
ситуатина

Ответы:

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. Во многих досках объявлений ответ - просто гиперссылка. У нас не было бы этого отличного ответа, если бы это было здесь.
Эндрю Нили
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
3
Повторяя, что это НЕ работает должным образом, по крайней мере, в течение нескольких минут. Например, это заняло разницу в 62 минуты и из-за округления показалось, что это разница в 2 минуты.
Джордан
6
он не дает правильного ответа на вопрос, вместо того, чтобы вычислять разницу в ТОЛЬКО минутах, эта разница рассчитывается как сложение дней, часов и минут ... таким образом, если разница составляет 1 день 1 час 1 минуту, будет отображаться 1 день 1 час 1 минута вместо 1501 минуты
Ахил Гупта
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.floorили Math.ceil:

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

В этом примере результат будет 720

KooiInc
источник
1
Ип. Или что-то вроде того, (Math.floor(seconds/60))+':'+((seconds/60)%60)если вам тоже нужны оставшиеся секунды
KooiInc 10.10.11
4
Я думаю, что это лучший ответ, я заметил, что принятый ответ не преобразует разницу в минуты, когда разница больше 60 минут
sani
Это тоже неправильно. 12:00 не может совпадать с 00:00, так как разница составляет 12 часов ...
Даватар,
1
@Davatar, кто говорит, что они одинаковы? он просто заявляет, что 12 часов - 0 часов - это то же самое, что 0 часов - 12 часов.
Марк Байенс
Старый ответ, но вы никогда не должны использовать 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);
MrGorki
источник
2
Это красиво, просто и работает для меня. Я удалил .getTime () из дат, хотя мне показалось более логичным, что идея состоит в том, чтобы сравнить две даты. Спасибо.
Йос
Старый ответ, но вы никогда не должны использовать 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);
}
AlliterativeAlice
источник
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 »или тип enum». Чтобы избежать ошибки, сделайте(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); 
стог
источник
9

Эта проблема легко решается с помощью момента.js, как в следующем примере:

var difference = mostDate.diff(minorDate, "minutes");

Второй параметр можно изменить для других параметров, см. Документацию moment.js.

например: «дни», «часы», «минуты» и т. д.

http://momentjs.com/docs/

CDN для moment.js доступен здесь:

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

Спасибо.

РЕДАКТИРОВАТЬ:

MostDate и minorDate должны быть типом момента.

Марко Блос
источник
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. Конвертировать millisecondsв minutesт.е.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);
Танзим Бхатти
источник