Python: Посчитать количество дней между датами

Статьи

Python: Посчитать количество дней между датами

Автор: Рамис, 29 сентября 2021

Из этого руководства вы узнаете, как посчитать количество дней между двумя датами в Python.

Мы будем использовать стандартную библиотеку datetime, которая позволит нам действительно легко работать с datetime объектами в Python.

Создание объекта Datetime

Поскольку datetime является встроенным модулем, мы можем сразу импортировать его.

from datetime import datetime

Создать объект datetime можно несколькими способами:

date_string = "1 January, 2021"

now = datetime.now() # получить текущую дату
dt1 = datetime(day=1, month=1, year=2021) # с заданными аргументами
dt2 = datetime.strptime(date_string, "%d %B, %Y") # из строки

Получить количество дней между датами в Python

Попытка посчитать количество дней между датами без использования модуля datetime, очень сложная задача - с учетом високосного года и количеством дней в каждом месяце (попытки создать собственную реализацию просто бессмысленна).

Мы можем просто вычесть datetime друг из друга, чтобы получить количество дней между ними:

from datetime import datetime

date1 = datetime.now()
date2 = datetime(day=1, month=12, year=2021)

timedelta = date2 - date1
print(timedelta)

Результат:

62 days, 10:11:33.887629

Если вам не нужны некоторые из этих показателей, можно конкретно указать, что вы хотите получить в результате: timedelta.days, timedelta.seconds или timedelta.microseconds:

now = datetime.now()
new_years = datetime(day=1, month=1, year=2022)
countdown = new_years - now

print('Сегодня: ', now)
print('Новый год наступит: ', new_years)
print('До нового года осталось дней: ', countdown.days)

Здесь мы создали timedelta объект countdown, и теперь мы может получить доступ к параметру days, чтобы узнать количество дней между new_years и now.

Результат:

Сегодня:  2021-09-29 14:43:49.218155
Новый год наступит:  2022-01-01 00:00:00
До нового года осталось дней:  93

Сложение и вычитание дней с помощью TimeDelta

Что, если вместо того, чтобы пытаться вычесть две известные даты друг из друга, вы захотите добавить или вычесть временные рамки? Например, клиент подписался на услугу за ежемесячную плату, и через 30 дней нужно напомнить ему об этом.

Используя timedelta вы можете построить временную рамку для этих 30 дней, и вычитать ее из другого datetime объекта:

from datetime import datetime, timedelta

now = datetime.now()
thirty_days = timedelta(days=30)

print('Через 30 дней: ', now + thirty_days)
print('30 дней назад: ', now - thirty_days)

Результат:

Через 30 дней:  2021-10-29 14:28:43.208634
30 дней назад:  2021-08-30 14:28:43.208634

Это невероятно полезная функция при попытке реализовать планирование или получение записей из базы данных (например, информацию за последние 30 дней).

Заключение

В этом руководстве мы рассмотрели все, что вам нужно знать о получении количества дней между двумя датами в Python.