티스토리 뷰
Date와 같은 범위(주, 달 등)의 기간 가져오기
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

날짜 범위를 특정 값마다 순환하기
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에 넣으면 된다.
'Swift 이론' 카테고리의 다른 글
| AsyncStream으로 콜백과 델리게이트 async-await 변환 (Swift) (0) | 2022.07.30 |
|---|---|
| Continuation을 이용하여 컴플리션 핸들러, 델리게이트 패턴을 async 함수로 변환하기 (Swift) (0) | 2022.06.27 |
| DispatchSemaphore 사용하기 (Swift) (0) | 2022.05.01 |
| DispatchGroup 사용하기 (Swift) (0) | 2022.05.01 |
