blob: d8c4a7bd54f4fcf1ff1551fefdc935bec9eebdda (
plain) (
blame)
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
31
32
33
34
35
36
37
38
|
import Foundation
struct SolsticeEvent: Identifiable, Codable {
let id: UUID
let name: String
let date: Date // UTC
let season: Season
init(name: String, date: Date, season: Season) {
self.id = UUID()
self.name = name
self.date = date
self.season = season
}
/// Convert UTC date to user's local timezone
func localDateTime() -> Date {
let utcCalendar = Calendar(identifier: .gregorian)
let utcComponents = utcCalendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date)
let timeZone = TimeZone.current
let offset = timeZone.secondsFromGMT(for: date)
var localCalendar = Calendar.current
localCalendar.timeZone = timeZone
var localComponents = utcComponents
localComponents.second = (localComponents.second ?? 0) + offset
return localCalendar.date(from: localComponents) ?? date
}
/// Days until this event from today
func daysUntil() -> Int {
let today = Calendar.current.startOfDay(for: Date())
let eventDay = Calendar.current.startOfDay(for: date)
let components = Calendar.current.dateComponents([.day], from: today, to: eventDay)
return max(0, components.day ?? 0)
}
}
|