11.07.2022, 20:16
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Получить разницу двух дат
Мне нужно получить разницу в таком формате:
9d 21h 103m 80s
Написал код:
const getDiff = (startDate, endDate) => {
let date1 = new Date(startDate);
let date2 = new Date(endDate);
let days = Math.round(Math.abs((date1 - date2) / (1000 * 60 * 60 * 24)));
let hours = Math.round(Math.abs((date1 - date2) / (1000 * 60 * 60)));
let minutes = Math.round(Math.abs((date1 - date2) / (1000 * 60)));
let seconds = Math.round(Math.abs((date1 - date2) / 1000));
return `${days}d ${hours}h ${minutes}m ${seconds}s`;
};
console.log(getDiff(new Date(2022, 11, 18, 3, 25, 0), new Date(2022, 11, 9, 1, 2, 0)));
console.log(getDiff(new Date(2022, 11, 9, 1, 2, 0), new Date(2022, 11, 18, 3, 25, 0)));
Получается что некорректно..
|
|
11.07.2022, 20:44
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
NovichokJS,
const getDiff = (startDate, endDate) => {
let date1 = new Date(startDate);
let date2 = new Date(endDate);
let difference = Math.abs(date1 - date2);
let days = Math.round(difference / (1000 * 60 * 60 * 24));
difference -= days * (1000 * 60 * 60 * 24)
let hours = Math.round(difference / (1000 * 60 * 60));
difference -= hours * (1000 * 60 * 60)
let minutes = Math.round(difference / (1000 * 60));
difference -= minutes * (1000 * 60)
let seconds = difference;
return `${days}d ${hours}h ${minutes}m ${seconds}s`;
};
console.log(getDiff(new Date(2022, 11, 18, 3, 25, 0), new Date(2022, 11, 9, 1, 2, 0)));
console.log(getDiff(new Date(2022, 11, 9, 1, 2, 0), new Date(2022, 11, 18, 3, 25, 0)));
|
|
11.07.2022, 21:00
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Сообщение от рони
|
NovichokJS,
const getDiff = (startDate, endDate) => {
let date1 = new Date(startDate);
let date2 = new Date(endDate);
let difference = Math.abs(date1 - date2);
let days = Math.round(difference / (1000 * 60 * 60 * 24));
difference -= days * (1000 * 60 * 60 * 24)
let hours = Math.round(difference / (1000 * 60 * 60));
difference -= hours * (1000 * 60 * 60)
let minutes = Math.round(difference / (1000 * 60));
difference -= minutes * (1000 * 60)
let seconds = difference;
return `${days}d ${hours}h ${minutes}m ${seconds}s`;
};
console.log(getDiff(new Date(2022, 11, 18, 3, 25, 0), new Date(2022, 11, 9, 1, 2, 0)));
console.log(getDiff(new Date(2022, 11, 9, 1, 2, 0), new Date(2022, 11, 18, 3, 25, 0)));
|
Тесты возвращают результат: - Функция getDiff должна вернуть разницу двух дат
- Функция getDiff должна вернуть разницу двух дат, когда первая меньше второй
что-то не то((
|
|
11.07.2022, 21:06
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
NovichokJS,
что не так?
|
|
11.07.2022, 21:21
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Сообщение от рони
|
NovichokJS,
что не так?
|
let seconds = difference;
разве не надо тут делить на 1000 ?
|
|
11.07.2022, 21:35
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
а нельзя решить с помощью методов getHours() и т.п? вместо того чтобы употреблять вот это hours * (1000 * 60 * 60) ?
|
|
11.07.2022, 21:42
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Сообщение от NovichokJS
|
разве не надо тут делить на 1000 ?
|
ок.
const getDiff = (startDate, endDate) => {
let date1 = new Date(startDate);
let date2 = new Date(endDate);
let difference = Math.abs(date1 - date2);
let days = Math.trunc(difference / (1000 * 60 * 60 * 24));
difference -= days * (1000 * 60 * 60 * 24)
let hours = Math.trunc(difference / (1000 * 60 * 60));
difference -= hours * (1000 * 60 * 60)
let minutes = Math.trunc(difference / (1000 * 60));
difference -= minutes * (1000 * 60)
let seconds = difference/1000;
return `${days}d ${hours}h ${minutes}m ${seconds}s`;
};
console.log(getDiff(new Date(2022, 11, 18, 3, 25, 0), new Date(2022, 11, 9, 1, 2, 0)));
console.log(getDiff(new Date(2022, 11, 9, 1, 2, 0), new Date(2022, 11, 18, 3, 25, 0)));
|
|
11.07.2022, 21:53
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
хух, проблема была в том что тут let seconds = difference/1000; был пропущен Math.trunc
|
|
11.07.2022, 21:53
|
Профессор
|
|
Регистрация: 25.04.2022
Сообщений: 159
|
|
Рони, спасибо!
|
|
13.07.2022, 12:39
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Альтертанивный вариант (извиняюсь что без новомодных let и =>)
function getDiff(startDate, endDate) {
// var date1 = new Date(startDate);
// var date2 = new Date(endDate);
// var diff = Math.abs(date2-date1);
var diff = Math.abs(new Date(endDate) - new Date(startDate));
diff = (diff-(diff%1000))/1000;
var seconds = diff % 60;
diff = (diff-seconds)/60;
var minutes = diff % 60;
diff = (diff-minutes)/60;
var hours = diff % 24;
var days = (diff-hours)/24;
return days+"d "+hours+"h "+minutes+"m "+seconds+"s";
}
|
|
|
|