Вывести день, месяц, недели между датами JS
Дана задача написать функцию, которая будет возвращать разницу между двумя датами, выглядит следующим образом условие
console.log(countBetweenTwoDays('03/22/22', '05/25/22'));
// Output The difference between dates is: 64 day(-s), 9 week(-s), 2 month(-s)
Я написал функцию
function countBetweenTwoDays(startDate, endDate) {
let difference = new Date(new Date(endDate).getTime() - new Date(startDate).getTime()).getTime();
let days = parseInt(difference / (1000 * 60 * 60 * 24));
let weeks = parseInt(difference / (1000 * 7 * 60 * 60 * 24));
let months = parseInt(difference / (1000 * 60 * 60 * 24 * 24));
return `The difference between dates is: ${days} day(-s), ${weeks} week(-s), ${months} month(-s)`;
}
console.log(countBetweenTwoDays('03/22/22', '05/25/22'));
// Output The difference between dates is: 64 day(-s), 9 week(-s), 2 month(-s)
Вопрос:
- Что я сделал не так в расчёте дней, почему я получил 63 дня вместо 64 (переменная
days)? - Мне кажется что я совершенно неправильно составил формулу для расчёта месяцев (переменная
month).
Ответы (1 шт):
Автор решения: EzioMercer
→ Ссылка
Если честно не очень понял как именно вы хотите округлять. В вашем случае parseInt работает как Math.floor(), но я бы использовал Math.ceil(), а вам похоже нужно Math.round(). Ниже простая реализация без учёта того что в разных месяцах разное кол-во дней и это может привести в неверным ответам:
const countBetweenTwoDays = (startDate, endDate) => {
const diffInMS = new Date(endDate).getTime() - new Date(startDate).getTime();
const diffInDays = diffInMS / 1000 / 60 / 60 / 24;
const diffInWeeks = diffInDays / 7;
const diffInMonth = diffInDays / 30;
console.log([diffInMS, diffInDays, diffInWeeks, diffInMonth]);
return `The difference between dates is: ${Math.round(diffInDays)} day(-s), ${Math.round(diffInWeeks)} week(-s), ${Math.round(diffInMonth)} month(-s)`;
}
console.log(countBetweenTwoDays('03/22/22', '05/25/22'));