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


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

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

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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.