Get Month from year and weekday using Python

Finding months that start with a specific weekday is a common task in calendar applications. Python provides several approaches using the calendar and datetime modules to determine which month in a given year starts with your desired weekday.

Using the Calendar Module

The calendar module provides useful functions for working with calendars and dates. It offers methods to generate calendars, calculate weekdays, and perform calendar-related operations without worrying about leap years.

Example

The following function iterates through all 12 months and checks which month starts with the specified weekday ?

import calendar

def get_month_by_weekday(year, weekday):
    for month in range(1, 13):
        first_day_weekday = calendar.weekday(year, month, 1)
        if calendar.day_name[first_day_weekday] == weekday:
            return calendar.month_name[month]
    return None

year = 2023
weekday = 'Monday'
month = get_month_by_weekday(year, weekday)

if month:
    print(f"The month starting with {weekday} in {year} is {month}.")
else:
    print(f"No month starts with {weekday} in {year}.")
The month starting with Monday in 2023 is May.

Using the Datetime Module

The datetime module allows you to work with dates and times directly. You can create date objects and use the strftime() method to format weekday and month names.

Example

This approach creates a datetime object for the first day of each month and compares the weekday name ?

from datetime import datetime

def get_month_by_weekday_datetime(year, weekday):
    for month in range(1, 13):
        first_day = datetime(year, month, 1)
        if first_day.strftime('%A') == weekday:
            return first_day.strftime('%B')
    return None

year = 2023
weekday = 'Saturday'
month = get_month_by_weekday_datetime(year, weekday)

if month:
    print(f"The month starting with {weekday} in {year} is {month}.")
else:
    print(f"No month starts with {weekday} in {year}.")
The month starting with Saturday in 2023 is April.

Using the weekday() Method with Integer Values

The weekday() method returns an integer representing the weekday, where Monday is 0 and Sunday is 6. This approach is more efficient when working with numeric weekday representations.

Example

This function uses integer comparison for better performance ?

import datetime

def find_month_with_weekday_number(year, weekday_number):
    weekday_names = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
    
    for month in range(1, 13):
        first_day = datetime.date(year, month, 1)
        if first_day.weekday() == weekday_number:
            return first_day.strftime("%B")
    return None

year = 2023
weekday_number = 2  # Wednesday (0=Monday, 1=Tuesday, 2=Wednesday, etc.)
month = find_month_with_weekday_number(year, weekday_number)

weekday_names = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

if month:
    print(f"The month starting with {weekday_names[weekday_number]} in {year} is {month}.")
else:
    print(f"No month starts with {weekday_names[weekday_number]} in {year}.")
The month starting with Wednesday in 2023 is June.

Comparison

Method Input Type Performance Best For
calendar module String weekday Good Calendar-specific operations
datetime with strings String weekday Good Date formatting and display
weekday() method Integer weekday Best Numeric comparisons

Conclusion

Python's calendar and datetime modules provide multiple approaches to find months starting with specific weekdays. Use the calendar module for calendar operations, datetime for date formatting, or weekday() for efficient numeric comparisons.

Updated on: 2026-03-27T08:24:30+05:30

891 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements