Как вычислить разницу в часах между датами в Moment Js

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для решения временных задач используйте функцию .diff() в Moment.js:

JS
Скопировать код
// С помощью Moment.js время больше не будет казаться относительным!
const diffHours = moment(endDate).diff(moment(startDate), 'hours');
console.log(diffHours); // Получаем строгое количество часов разницы.

Если необходимы дробные значения, объекты duration помогут с методом .asHours():

JS
Скопировать код
// Почему ограничиваться целыми числами, когда нужна точность?
const duration = moment.duration(moment(endDate).diff(moment(startDate)));
const diffFractionalHours = duration.asHours();
console.log(diffFractionalHours); // Дробные части рассчитаны – точность достигнута!
Кинга Идем в IT: пошаговый план для смены профессии

Манипуляции с часовыми поясами

Работаете со временем в разных часовых поясах? Moment Timezone к вашим услугам:

JS
Скопировать код
// Находясь где угодно, от Нью-Йорка до Лос-Анджелеса, используйте Moment Timezone Java(script)!
let startDate = moment.tz("2023-05-25 12:00", "America/New_York");
let endDate = moment.tz("2023-05-26 16:00", "America/Los_Angeles");
let diffHours = endDate.diff(startDate, 'hours');
console.log(diffHours); // Часовые пояса перестают быть проблемой!

Путешествие во времени с fromNow() и from()

Освободитесь от ограничений календаря с помощью fromNow() или from() для расчета временного интервала:

JS
Скопировать код
// Возможно, это прямо-таки краткое пребывание обратно в прошлом!
let pastDate = moment("2023-01-01");
console.log(pastDate.fromNow()); // Почувствуем ностальгию заново!

Однако приверженность методам .diff() и .asHours() будет кстати при традиционных расчётах разницы в часах:

JS
Скопировать код
// Приветствуем возвращение в будущее!
let pastDate = moment("2023-01-01");
let diffHours = moment().diff(pastDate, 'hours');
console.log(diffHours); // Tempus fugit, но мы всё контролируем.

Цепочка методов

Зачем писать две строки кода, когда можно обойтись одной?

JS
Скопировать код
// Экономия времени написания кода – загадка, решаемая одной строкой!
let hoursDifference = moment(endDate).subtract(1, 'days').diff(moment(startDate), 'hours');
// Мы вычитаем день и считаем часы – это просто!

Визуализация

Простая тайм-лайн в Moment.js между двумя датами:

Markdown
Скопировать код
Начальная дата: 📅🕒 (25 мая, 12:00 дня)
Конечная дата:   📅🕚 (26 мая, 16:00 дня)

Соедините точки, чтобы получить общую картину:

JS
Скопировать код
// Время всегда в наших руках.
let diff = endDate.diff(startDate, 'hours');
Markdown
Скопировать код
📅🕒 ------ 16 часов ------ 📅🕚
И вуаля, перед вами **16-часовая тайм-лайн** от полудня одного дня до позднего дня следующего.

Программирование на профессиональном уровне

Персонализируйте формат вывода дат

Функция .format() превратит вас в Пикассо в мире дат:

JS
Скопировать код
// Не откладывайте на завтра то, что можно сделать сегодня.
console.log(endDate.format('MMMM Do YYYY, h:mm:ss a')); // "26 мая 2023 года, 4:00:00 дня"

Переход на летнее время (DST)

Каждый будет рад дополнительному часу сна:

JS
Скопировать код
// Кто разберётся в DST? (Только Moment.js!)
let startDSTDate = moment('2023-03-13T02:00:00-0400');
let endDSTDate = moment('2023-03-13T03:00:00-0400');
let diffDSTHours = endDSTDate.diff(startDSTDate, 'hours');
console.log(diffDSTHours); // Час DST прямо перед вами!

Используйте последнюю версию Moment.js

Выбирайте новейшую и наиболее стабильную версию Moment.js:

HTML
Скопировать код
<script src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>

Комментарии и именование

Понятные названия переменных сделают ваш код более читабельным и помогут сэкономить время:

JS
Скопировать код
// Проявите презрение ко времени: используйте переменные, которые декларируют своё назначение!
let meetingStart = moment('2023-06-01T09:00:00');
let meetingEnd = moment('2023-06-01T17:00:00');
let meetingDurationHours = meetingEnd.diff(meetingStart, 'hours');
console.log(meetingDurationHours); // Рабочий день с 9 до 17 отражён в вашей консоли!

Полезные материалы

  1. Документация Moment.jsваш главный информационный ресурс о функции .diff в Moment.js.
  2. Разница в часах между двумя датами с Moment.js – Stack Overflowсобрание настоящих хаков на Stack Overflow.
  3. Шпаргалка по Moment.js
    • ваше верное руководство по Moment.js
    !
  4. Понимание даты и времени в JavaScript | DigitalOceanпогружение в управление датой и временем в JavaScript.
  5. Документация Moment Timezoneвсемирное руководство по часовым поясам в Moment.js.