JavaScript - Отримайте хвилини між двома датами


156

Якщо у мене є дві дати, як я можу використовувати JavaScript, щоб отримати різницю між двома датами в хвилинах?


це об'єкти дати чи просто рядки? будь ласка, наведіть приклад
situatin

Відповіді:


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", то година диффасу становить дві години. Має бути одна година.
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);не працює, коли різниця більша за 60 хвилин
kuncevic.dev

3
Повторивши, що це НЕ працює належним чином, принаймні протягом декількох хвилин. Наприклад, це зайняло різницю в 62 хвилини, і через округлення подумав, що це різниця в 2 хвилини.
Йордан

6
він не відповідає правильно на питання, замість того, щоб розраховувати різницю ВІННО хвилин, вона розраховується як складова днів, годин і хвилин ... таким чином, якщо різниця становить 1 день 1 година 1 хвилина, вона покаже 1 день 1 година 1 хвилина, замість 1501 хвилини
Ахіл Гупта

170

Віднімання 2-х об'єктів дати дає вам різницю в мілісекундах, наприклад:

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

4
Я думаю, що це краща відповідь, я помітив, що прийнята відповідь не перетворює різницю в хвилину, коли різниця перевищує 60 хвилин
сан

Це теж неправильно. 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 надасть вам помилку "Ліва і права рука арифметичної операції повинна мати тип" будь-який "," номер "або тип перерахунку". Щоб уникнути помилки, робіть(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

Ця проблема вирішується легко з moment.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.