Получить разницу в часах между двумя датами в Moment.js
Я пытаюсь вычислить разницу между двумя датами с использованием MomentJs следующим образом:
moment(end.diff(startTime)).format("m[m] s[s]")
Однако я также хочу отображать количество часов, когда это необходимо (только если прошло 60 минут и более).
Когда я пытаюсь получить количество часов продолжительности с помощью кода:
var duration = moment.duration(end.diff(startTime));
var hours = duration.hours();
то возвращается текущий час, а не количество часов между двумя датами.
Как мне получить разницу в часах между двумя моментами?
5 ответ(ов)
Следующий код демонстрирует, как вычислить разницу в количестве дней между двумя датами, используя MomentJS:
var now = moment(new Date()); // сегодняшняя дата
var end = moment("2015-12-1"); // другая дата
var duration = moment.duration(now.diff(end));
var days = duration.asDays();
console.log(days);
В этом примере мы создаем объект now
, представляющий текущую дату, и объект end
, который соответствует заданной дате (в данном случае, 1 декабря 2015 года). Затем мы используем метод diff()
для вычисления разницы между текущей датой и указанной датой, после чего преобразуем эту разницу в длительность и получаем количество дней с помощью метода asDays()
. Наконец, мы выводим результат в консоль.
Вам просто нужно передать hours
в качестве второго параметра функции diff
библиотеки Moment.js.
Пример:
var a = moment([21, 30, 00], "HH:mm:ss");
var b = moment([09, 30, 00], "HH:mm:ss");
a.diff(b, 'hours'); // 12
Документация: https://momentjs.com/docs/#/displaying/difference/
Дополнительный пример:
const dateFormat = "YYYY-MM-DD HH:mm:ss";
// Получаем текущее время и время этого же времени вчера
const rightNow = moment().format(dateFormat);
const thisTimeYesterday = moment().subtract(1, 'days').format(dateFormat);
// Передаем 'hours' в качестве второго параметра функции diff
const differenceInHours = moment(rightNow).diff(thisTimeYesterday, 'hours');
console.log(`${differenceInHours} часов прошло с этого времени вчера`);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
Таким образом, используя функции библиотеки Moment.js, вы можете легко вычислять разницу во времени в любых единицах измерения.
Я понимаю, что это уже устарело, но вот однострочное решение:
const hourDiff = start.diff(end, "hours");
Где start и end — это объекты moment
.
Ваш код использует библиотеку Moment.js для вычисления продолжительности между двумя временными метками. Давайте разберем его шаг за шагом и переведем на русский язык.
- Вы задаете начальное время
__startTime
равным "2016-06-06T09:00". - Аналогично, вы задали конечное время
__endTime
равным "2016-06-06T21:00". - Затем вы вычисляете разницу между
__endTime
и__startTime
с помощьюmoment.duration()
, сохраняя результат в переменной__duration
. - Наконец, вы преобразуете эту продолжительность в часы с помощью метода
asHours()
и выводите результат в консоль.
Вот ваш код с небольшими комментариями на русском:
// Задаем начальное время
var __startTime = moment("2016-06-06T09:00").format();
// Задаем конечное время
var __endTime = moment("2016-06-06T21:00").format();
// Вычисляем продолжительность между конечным и начальным временем
var __duration = moment.duration(moment(__endTime).diff(__startTime));
// Получаем количество часов из продолжительности
var __hours = __duration.asHours();
// Выводим результат в консоль
console.log(__hours);
Этот код должен вывести 12
, так как разница между 9:00 и 21:00 составляет 12 часов. Если у вас возникнут дополнительные вопросы по этой теме, не стесняйтесь спрашивать!
Для вычисления разницы между двумя датами в библиотеки Moment.js вы можете использовать метод diff()
. Ниже приведён пример того, как это сделать:
let startDate = "2022-08-14";
let endDate = "2022-08-20";
// Создаем объекты moment для начала и конца
let startDateMoment = moment(startDate.split('-')); // ["2022", "08", "14"]
let endDateMoment = moment(endDate.split('-')); // ["2022", "08", "20"]
// Вычисляем разницу в часах
console.log('Разница: ', endDateMoment.diff(startDateMoment, 'hours')); // 144
Обратите внимание, что разница между 14 и 20 августа составляет 6 дней, что равно 144 часам. Для корректного получения разницы в часах, убедитесь, что даты правильно интерпретируются.
Также не забудьте подключить библиотеку Moment.js в вашем HTML файле:
<script src="https://momentjs.com/downloads/moment.js"></script>
Если у вас возникнут дополнительные вопросы или вы хотите узнать о других возможностях Moment.js, не стесняйтесь спрашивать!
Преобразование Unix-метки времени в формат времени в JavaScript
Где найти документацию по форматированию даты в JavaScript?
Moment.js: Преобразование в объект даты
Как преобразовать дату в UTC?
Как вычислить количество дней между двумя датами?