티스토리 뷰

Date와 같은 범위(주, 달 등)의 기간 가져오기

dateInterval

Calendar의 dateInterval 메소드를 사용해 해당 날짜와 Calendar.Component가 일치하는 날짜기간을 DateInterval 타입으로 가져올 수 있다.

예를 들어 해당 날짜와 같은 주(Week)의 날짜를 가져올 때 쓸 수 있다.

let date = Date() // 2022-08-24 13:04:00
guard let dateInterval = Calendar.current
    .dateInterval(of: .weekOfMonth, for: date) else { return }
// 2022-08-21 00:00:00 ~ 2022-08-28 00:00:00

Group 1.png

Calendar.Component

날짜 범위를 특정 값마다 순환하기

enumerateDates

Calendar의 enumerateDates 메소드를 사용해 매일 또는 매주 등 반복된 여러 날짜 값들을 가져올 때 사용할 수 있다.

위에서 생성한 dateInterval 범위 내의 모든 날을 가져오는 코드이다.

var dates = [dateInterval.start]

Calendar.current.enumerateDates(
    startingAfter: dateInterval.start,
    matching: DateComponents(hour: 0),
    matchingPolicy: .nextTime
) { date, exactMatch, stop in
    guard let date = date else { return }
    guard date < dateInterval.end else {
        stop = true
        return
    }
    dates.append(date)
}
// dates 배열의 원소
//  2022-08-21 00:00:00
//  2022-08-22 00:00:00
//  2022-08-23 00:00:00
//  2022-08-24 00:00:00
//  2022-08-25 00:00:00
//  2022-08-26 00:00:00
//  2022-08-27 00:00:00

enumerateDates 메소드는 특정 날짜로부터 시작하여 어떤 DateComponents와 일치하는 Date를 찾아 순환시킨다. 따라서 날(Day)을 순환하고 싶다면 매일 0시(Hour)를 DateComponents에 넣으면 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함