Swift 에서 날짜/시간 비교, 계산하기 - Date, Calendar, dateComponents, date(byAdding:)
개발/iOS - Swift1 2025. 12. 5. 07:591. Date 타입끼리 직접 비교하기
Swift의 Date 타입은 내부적으로 시간 기준을 갖고 있기 때문에 단순 비교가 가능합니다.
let now = Date()
let after1Min = now.addingTimeInterval(60)
print(now < after1Min) // true
print(now > after1Min) // false
print(now == after1Min) // false
이 비교는 "년/월/일"이 아니라, 정확한 초 단위의 시각 그대로 비교합니다.
2. 날짜가 같은 날인지 확인하기
UI에서 "오늘 작성된 글", "같은 날짜의 기록"처럼 날짜 단위 비교가 필요하다면 Calendar의 기능을 활용합니다.
let calendar = Calendar.current
let isSameDay = calendar.isDate(date1, inSameDayAs: date2)
시간이 달라도
2025-12-04 01:00:00
2025-12-04 22:00:00
이 둘은 같은 날로 처리됩니다.
3. 오늘, 어제, 내일인지 판별하기
이건 Swift가 기본으로 제공하는 편리한 메서드가 있습니다.
let calendar = Calendar.current
if calendar.isDateInToday(someDate) {
print("오늘 날짜입니다.")
}
if calendar.isDateInYesterday(someDate) {
print("어제 날짜입니다.")
}
if calendar.isDateInTomorrow(someDate) {
print("내일 날짜입니다.")
}
앱에서 게시물 날짜 라벨 표현할 때 자주 쓰는 패턴입니다.
4. 두 날짜의 차이 계산하기 (일, 시간, 분)
일(day) 단위 차이
let calendar = Calendar.current
let diff = calendar.dateComponents([.day], from: startDate, to: endDate)
print(diff.day ?? 0)
여러 단위를 한 번에 계산하기
let comp = calendar.dateComponents([.day, .hour, .minute], from: startDate, to: endDate)
print(comp.day)
print(comp.hour)
print(comp.minute)
원하는 단위만 넣어서 계산할 수 있으니 범용성이 높습니다.
5. 초 단위 차이 계산하기
날짜 객체끼리 직접 시간 간격을 계산하는 방법도 있습니다.
let seconds = endDate.timeIntervalSince(startDate)
print(seconds)
- 양수 → endDate가 더 미래
- 음수 → endDate가 과거
- 결과는 Double(초 단위)
간단한 시간 계산이라면 가장 빠른 접근입니다.
6. 날짜에 값 더하기·빼기 (일/월/시간/분 단위)
하루 더하기
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: Date())
7일 더하기
Calendar.current.date(byAdding: .day, value: 7, to: Date())
3시간 빼기
Calendar.current.date(byAdding: .hour, value: -3, to: Date())
두 달 더하기
Calendar.current.date(byAdding: .month, value: 2, to: Date())
1년 더하기
Calendar.current.date(byAdding: .year, value: 1, to: Date())
addingTimeInterval도 가능하지만 day/month/year 단위는 Calendar로 계산하는 것이 훨씬 정확합니다.
7. 날짜의 시작(자정) 구하기
날짜 비교의 기준을 "00시 00분 00초"로 맞추고 싶을 때 사용합니다.
let calendar = Calendar.current
let comps = calendar.dateComponents([.year, .month, .day], from: Date())
let startOfDay = calendar.date(from: comps)
날짜끼리 비교할 때 기준을 명확하게 잡는 데 유용합니다.
8. 이번 달의 첫 날, 마지막 날 구하기
이번 달 첫 날
let calendar = Calendar.current
let now = Date()
let comps = calendar.dateComponents([.year, .month], from: now)
let firstDay = calendar.date(from: comps)
이번 달 마지막 날
if let firstDay = firstDay {
let lastDay = calendar.date(byAdding: DateComponents(month: 1, day: -1), to: firstDay)
}
달력을 만들거나 월간 통계를 처리할 때 자주 필요한 계산입니다.
반응형
9. 특정 단위로 날짜 비교하기 (연/월/일/시)
Calendar에는 특정 단위까지만 비교하는 기능도 있습니다.
let calendar = Calendar.current
let sameHour = calendar.isDate(date1, equalTo: date2, toGranularity: .hour)
기준이 되는 granularity는 다음 중 선택할 수 있습니다.
| 단위 | 의미 |
| .year | 같은 연도인지 |
| .month | 같은 월인지 |
| .day | 같은 날짜인지 |
| .hour | 같은 시간인지 |
| .minute | 같은 분인지 |
10. 날짜가 특정 범위 안에 들어가는지 확인하기
Swift의 Range 기능을 이용한 방식입니다.
let now = Date()
let range = startDate ... endDate
if range.contains(now) {
print("범위 안에 포함됩니다.")
}
반응형




