Число дней в месяце в Python: calendar.monthrange
calendar.monthrange(year, month) возвращает пару: день недели первого числа и количество дней месяца. Для числа дней нужен второй элемент; февраль автоматически зависит от года.
import calendar
_, days = calendar.monthrange(2024, 2)
print(days) # 29
print(calendar.monthrange(2023, 2)[1]) # 28
print(calendar.monthrange(2024, 12)[1]) # 31Вариант через даты
Разность первого числа следующего месяца и первого числа текущего тоже даёт длительность. При этом отдельно обработайте декабрь:
from datetime import date
year, month = 2024, 2
start = date(year, month, 1)
next_month = (date(year + 1, 1, 1) if month == 12
else date(year, month + 1, 1))
print((next_month - start).days) # 29Для крайних допустимых лет date переход к следующему году требует отдельного решения. Если задача только о числе дней, monthrange короче и не нуждается в построении следующей даты.
Проверка ввода
Месяц должен соответствовать контракту1…12, год — правилам выбранного API. Проверьте февраль високосного и обычного года, декабрь и неверный месяц. У модуля datetime нет функции monthrange: используйте calendar.monthrange или разность дат.