[swift] SwiftDate를 사용하여 특정 주의 시작 날짜와 종료 날짜 사이의 특정 요일의 일자 목록 가져오기

SwiftDate는 Swift용 DateTime 처리 라이브러리로, 날짜와 시간을 처리하고 조작하는 데 도움을 줍니다. 이 라이브러리를 사용하여 특정 주의 시작 날짜와 종료 날짜 사이에서 특정 요일의 일자 목록을 가져오는 방법을 알아보겠습니다.

필요한 패키지 설치

먼저, Cocoapods를 사용하여 SwiftDate 패키지를 설치해야 합니다. Podfile을 열고 아래와 같이 추가합니다.

pod 'SwiftDate'

터미널에서 pod install을 실행하여 패키지를 설치합니다.

코드 예제

import SwiftDate

func getDatesInWeekdayRange(startDate: Date, endDate: Date, weekday: Weekday) -> [String] {
    var dates = [String]()
    
    let calendar = Calendar.current
    let range = calendar.range(of: .weekOfYear, in: .year, for: startDate)
    
    if let startWeek = range?.lowerBound, let endWeek = range?.upperBound {
        for week in startWeek..<endWeek {
            let weekDate = calendar.date(bySetting: .weekOfYear, value: week, of: startDate)!
            
            for i in 1...7 {
                let currentDate = weekDate.addingTimeInterval(TimeInterval(i * 24 * 60 * 60))
                
                if currentDate.weekday == weekday {
                    let dateFormatter = DateFormatter()
                    dateFormatter.dateFormat = "yyyy-MM-dd"
                    let dateString = dateFormatter.string(from: currentDate)
                    dates.append(dateString)
                }
            }
        }
    }
    
    return dates
}

// 예제 사용
let startDate = Date().startOfWeek
let endDate = Date().endOfWeek
let weekday = Weekday.saturday

let dates = getDatesInWeekdayRange(startDate: startDate, endDate: endDate, weekday: weekday)
print(dates)

위의 코드는 입력으로 시작 날짜(startDate), 종료 날짜(endDate)와 조회할 요일(weekday)을 받아 해당하는 주의 시작 날짜와 종료 날짜 사이에서 주어진 요일의 일자 목록을 반환하는 함수입니다.

결과 확인

위의 예제를 실행하면 현재 주의 시작 날짜부터 종료 날짜까지의 토요일 일자 목록이 출력됩니다.

["2022-09-10", "2022-09-17", "2022-09-24"]

따라서, SwiftDate를 사용하여 특정 주의 시작 날짜와 종료 날짜 사이에서 원하는 요일의 일자 목록을 쉽게 가져올 수 있습니다.

참고 자료