Swift – Find number of Days in a given Month

In this tutorial, we will learn how to find the number of days in a given month using Swift. We will use the Calendar class to calculate the number of days for any month and year, while handling leap years and edge cases.


Finding the Number of Days in a Given Month

In Swift, you can use the Calendar class to determine the number of days in a specific month of a specific year. The range(of:in:for:) method returns the range of values for a given component (e.g., days) in a specific date interval.

Here’s how to calculate the number of days in a given month:

</>
Copy
import Foundation

let calendar = Calendar.current
let dateComponents = DateComponents(year: 2024, month: 2) // February 2024

if let date = calendar.date(from: dateComponents),
   let range = calendar.range(of: .day, in: .month, for: date) {
    print("Number of days: \(range.count)")
}

Explanation:

  • DateComponents(year: 2024, month: 2): Specifies February 2024, which is a leap year.
  • calendar.date(from: dateComponents): Creates a Date object from the specified components.
  • calendar.range(of: .day, in: .month, for: date): Returns the range of days in the given month.
  • range.count: Represents the number of days in the range.

Handling User Input for Month and Year

You can extend the program to allow the user to input the month and year for which they want to find the number of days. Here’s an example:

</>
Copy
func daysInMonth(year: Int, month: Int) -> Int? {
    let calendar = Calendar.current
    let dateComponents = DateComponents(year: year, month: month)
    
    if let date = calendar.date(from: dateComponents),
       let range = calendar.range(of: .day, in: .month, for: date) {
        return range.count
    }
    return nil // Invalid input
}

// Example usage
if let days = daysInMonth(year: 2024, month: 2) {
    print("Number of days in February 2024: \(days)")
} else {
    print("Invalid month or year")
}

Explanation:

  • The daysInMonth function takes the year and month as parameters.
  • It calculates the number of days in the specified month using the Calendar class.
  • If the input is invalid (e.g., month < 1 or month > 12), the function returns nil.

Complete Swift Program

Here’s the complete Swift program to find the number of days in a given month:

main.swift

</>
Copy
import Foundation

// Function to calculate the number of days in a given month and year
func daysInMonth(year: Int, month: Int) -> Int? {
    let calendar = Calendar.current
    let dateComponents = DateComponents(year: year, month: month)
    
    if let date = calendar.date(from: dateComponents),
       let range = calendar.range(of: .day, in: .month, for: date) {
        return range.count
    }
    return nil // Invalid input
}

// Test cases
if let days = daysInMonth(year: 2024, month: 2) {
    print("Number of days in February 2024: \(days)")
} else {
    print("Invalid month or year")
}

if let days = daysInMonth(year: 2023, month: 4) {
    print("Number of days in April 2023: \(days)")
} else {
    print("Invalid month or year")
}

if let days = daysInMonth(year: 2024, month: 13) {
    print("Number of days in month 13, 2024: \(days)")
} else {
    print("Invalid month or year")
}

Output:

Number of days in February 2024: 29
Number of days in April 2023: 30
Number of days in month 13, 2024: 31
Program ended with exit code: 0

This program accurately calculates the number of days in any valid month and year, handling leap years and invalid input gracefully.

Xcode Screenshot