Как лучше всего рассчитать разницу дат в Javascript

Я выполняю функцию в Javascript, например VisualBasic DateDiff.

Вы указываете две даты и интервал времени возврата (секунды, минуты, дни и т. д.)

DateDiff(ByVal Interval As Microsoft.VisualBasic.DateInterval, _
  ByVal Date1 As Date, ByVal Date2 As Date) as Long

Итак, как лучше всего рассчитать разницу дат Javascript?

Дубликат: stackoverflow.com/questions/41948/…

Vincent Robert 29.11.2008 14:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
38
1
83 921
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы следуете этому руководство, один из способов - использовать:

Date.getTime()

Вы найдете полный функция javascript здесь с подтверждением даты.

При этом, как прокомментировал Рафи Б. 5 лет спустя, «Получить разницу между двумя датами в javascript?» является более точным.

var _MS_PER_DAY = 1000 * 60 * 60 * 24;

// a and b are javascript Date objects
function dateDiffInDays(a, b) {
  // Discard the time and time-zone information.
  var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
  var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());

  return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}

Если вы установите с 14:00 до 23:59 в тот же день, он показывает неправильный час. Вместо 10 часов он дает 10:59. Вы можете это проверить?

jewelhuq 25.12.2016 03:52

@jewelhuq, 8 лет спустя, мне понадобится немного больше деталей. Можно отдельный вопрос задать?

VonC 25.12.2016 03:52

var start = new Date ("2016-12-24 14:00"); var end = new Date ("2016-12-24 23:59"); var diffMs = (end.getTime () - start.getTime ()); // миллисекунды между настоящим моментом и Рождеством var diffDays = Math.round (diffMs / 86400000); // дней var diffHrs = Math.round ((diffMs% 86400000) / 3600000); // часы ar diffMins = Math.round (((diffMs% 86400000)% 3600000) / 60000); // минуты console.info (diffHrs); он возвращается в 10:59, работает нормально до 23:00. в чем проблема.

jewelhuq 25.12.2016 03:57

@jewelhuq Примечание: ссылка javascript.internet.com больше не действительна. Я восстановил его. Я также указал на более точное решение. Наконец, что касается вашего последнего комментария, его лучше всего задать в новом вопросе.

VonC 25.12.2016 03:58

какое решение более точное?

jewelhuq 25.12.2016 04:04

@jewelhuq тот, который я описываю в отредактированном ответе как более точный: stackoverflow.com/a/15289883/6309

VonC 25.12.2016 04:05

Позвольте нам продолжить обсуждение в чате.

jewelhuq 25.12.2016 04:07
Ответ принят как подходящий

Используйте Дата объекта так:

function DateDiff(var /*Date*/ date1, var /*Date*/ date2) {
    return date1.getTime() - date2.getTime();
}

Это вернет разницу в миллисекундах между двумя датами. Преобразование в секунды, минуты, часы и т. д. Не должно быть слишком сложным.

Вам не нужно использовать getTime. Если вы просто выполните return date1 - date2;, результат будет тот же. (И это не относится к конкретной реализации, это указано в спецификации, хотя и несколько косвенно).

T.J. Crowder 27.05.2010 17:00

Я бы рекомендовал использовать return date2.getTime() - date1.getTime();, чтобы порядок дат соответствовал ожиданиям (в противном случае будет возвращено отрицательное число).

kingjeffrey 10.08.2011 23:19

Этот ответ принят, но, к сожалению, неверен. Попробуйте код new Date(new Date()-new Date());

ᆼᆺᆼ 03.12.2011 06:32

@ PéterVarga Зачем ты оборачиваешь его в другой new Date()? В случае, если вы описываете результат, который интересует OP, это 0, а не new Date(0);

alnorth29 25.09.2012 02:19
Shouldn't be too difficult. Хм, правда? Подсчет месяцев / лет затруднен (если даже возможно), мы должны использовать информацию when и where для подсчета dst, високосных лет и т. д.
vp_arth 28.06.2015 20:40

Другие вопросы по теме