Усі статті

Різниця між датами: чому підрахунок днів складніший, ніж здається

Здавалося б, порахувати кількість днів між двома датами — тривіальна задача: відняти одну дату від іншої. Але кілька особливостей календаря роблять це складнішим, ніж виглядає на перший погляд.

Високосні роки

Кожні чотири роки до лютого додається 29-й день, за винятком років, кратних 100, які не кратні 400 (тому 2000 рік був високосним, а 1900 — ні). Наївний підрахунок днів без урахування цього правила дає неправильний результат для дат, що охоплюють різну кількість високосних років.

Різна кількість днів у місяцях

Місяці мають від 28 до 31 дня, тож обчислення "різниці в місяцях" неоднозначне: різниця між 31 січня і 28 лютого — це один місяць чи майже місяць? Різні бібліотеки й системи відповідають на це питання по-різному.

Часові пояси і межі доби

Якщо дати включають час доби, а не лише день, різниця в часових поясах може змінити результат підрахунку днів на одиницю: 23:30 у Києві та 21:30 у Лондоні того самого моменту можуть припадати на різні календарні дні залежно від того, у якому поясі рахувати.

Навіщо це потрібно

  • Розрахувати точну кількість днів до дедлайну чи від дати початку проєкту.
  • Обчислити тривалість оренди, підписки чи гарантійного терміну.
  • Перевірити код обробки дат на граничних випадках (високосні роки, межі місяців).

Неоднозначність "різниці в місяцях" на межі коротких місяців

Якщо відняти від 31 березня один місяць, результат неочевидний — лютого 31-го числа не існує, тож різні бібліотеки повертають або 28 лютого (найближча існуюча дата), або 3 березня (переносять "зайві" дні на наступний місяць). Обидва підходи по-своєму логічні, але дають різні відповіді, тому при звірці розрахунків із іншим інструментом варто спершу перевірити саме цей граничний випадок.

Спробувати інструмент