Python
Как узнать количество дней в месяце в Python
В Python количество дней в месяце удобно получать через модуль calendar. Функция calendar.monthrange(year, month) возвращает пару значений: день недели первого дня месяца и количество дней в месяце. Нам обычно нужен второй элемент
import calendar
days = calendar.monthrange(2026, 2)[1]
print(days)
Результат
28
Функция учитывает год, поэтому февраль в високосном году будет иметь 29 дней
Короткий ответ
import calendar
year = 2024
month = 2
days = calendar.monthrange(year, month)[1]
print(days)
Результат
29
2024 год високосный, поэтому в феврале 29 дней
Что возвращает monthrange
import calendar
result = calendar.monthrange(2026, 6)
print(result)
Результат будет похож на такой
(0, 30)
Первое число — день недели первого дня месяца, второе число — количество дней в месяце. Если нужна только длина месяца, берите индекс [1]
days = calendar.monthrange(2026, 6)[1]
Как сделать функцию
import calendar
def days_in_month(year, month):
return calendar.monthrange(year, month)[1]
print(days_in_month(2026, 1))
print(days_in_month(2026, 2))
print(days_in_month(2024, 2))
Результат
31
28
29
Такая функция удобна, если задача повторяется в нескольких местах программы
Как принять год и месяц от пользователя
import calendar
year = int(input("Введите год: "))
month = int(input("Введите месяц числом от 1 до 12: "))
days = calendar.monthrange(year, month)[1]
print("Дней в месяце:", days)
Если пользователь введет месяц вне диапазона 1-12, Python выдаст ошибку. Для учебной программы лучше добавить проверку
import calendar
year = int(input("Введите год: "))
month = int(input("Введите месяц числом от 1 до 12: "))
if 1 <= month <= 12:
days = calendar.monthrange(year, month)[1]
print("Дней в месяце:", days)
else:
print("Месяц должен быть от 1 до 12")
Как проверить високосный год
В модуле calendar есть функция isleap()
import calendar
print(calendar.isleap(2024))
print(calendar.isleap(2026))
Результат
True
False
Для количества дней в месяце отдельно проверять високосный год не нужно: monthrange() уже делает это. Но isleap() полезна, если вам нужно вывести отдельное объяснение пользователю
import calendar
year = 2024
month = 2
days = calendar.monthrange(year, month)[1]
if month == 2 and calendar.isleap(year):
print("Это февраль високосного года")
print("Дней:", days)
Как получить название месяца
Если нужно вывести не только число, но и название месяца, можно использовать calendar.month_name
import calendar
year = 2026
month = 6
days = calendar.monthrange(year, month)[1]
month_name = calendar.month_name[month]
print(month_name, year, "—", days)
По умолчанию названия будут на английском. Для русских названий проще завести свой список
months = [
"", "январь", "февраль", "март", "апрель", "май", "июнь",
"июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"
]
month = 2
print(months[month])
Пустая строка в начале нужна, чтобы январь был под индексом 1, февраль под индексом 2 и дальше так же, как номера месяцев
Альтернативный способ через datetime
Можно вычислить количество дней как разницу между первым днем следующего месяца и первым днем текущего месяца. Но для новичка это длиннее
from datetime import date, timedelta
def days_in_month(year, month):
if month == 12:
next_month = date(year + 1, 1, 1)
else:
next_month = date(year, month + 1, 1)
last_day = next_month - timedelta(days=1)
return last_day.day
print(days_in_month(2024, 2))
Этот вариант полезен, если вы уже работаете с объектами date, но для обычной задачи calendar.monthrange() проще
Мини-практика
Создайте файл days_in_month.py
import calendar
months = [
"", "январе", "феврале", "марте", "апреле", "мае", "июне",
"июле", "августе", "сентябре", "октябре", "ноябре", "декабре"
]
year = int(input("Год: "))
month = int(input("Месяц: "))
if 1 <= month <= 12:
days = calendar.monthrange(year, month)[1]
print(f"В {months[month]} {year} года дней: {days}")
else:
print("Номер месяца должен быть от 1 до 12")
Проверьте февраль 2024 и февраль 2026 года. Это сразу покажет, что високосный год учитывается
Частые ошибки
Первая ошибка — передавать месяц как строку. monthrange() ждет число месяца от 1 до 12, поэтому ввод пользователя нужно преобразовать через int()
Вторая ошибка — забыть, что январь — это 1, а не 0. В calendar.monthrange() месяцы нумеруются так же, как в обычном календаре
Третья ошибка — писать свою таблицу дней и забыть про високосный февраль. Если есть год и месяц, лучше использовать calendar.monthrange()
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Как посчитать количество уникальных элементов в списке Python
- Как узнать версию Python в терминале, VS Code и внутри программы
- Как узнать версию установленной библиотеки Python: pip show, pip list и importlib.metadata
- Как узнать длину строки в Python: len, пробелы, переносы и Unicode