Из этого руководства вы узнаете, как посчитать количество дней между двумя датами в 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.