diff options
| author | ivar <i@oiee.no> | 2026-03-23 16:01:57 +0100 |
|---|---|---|
| committer | ivar <i@oiee.no> | 2026-03-23 16:01:57 +0100 |
| commit | 141e76fb5b9da799988a61a3f62d2523d63e6e35 (patch) | |
| tree | fd9f01f828fe1a58365667c7554d593db50f8bda /Solverv | |
| parent | 2ddeecbc8cee23bb8bcbb32554c3eff05a43e098 (diff) | |
| download | solverv-141e76fb5b9da799988a61a3f62d2523d63e6e35.tar.xz solverv-141e76fb5b9da799988a61a3f62d2523d63e6e35.zip | |
feat: add SolsticeEvent model with UTC-to-local conversion
Diffstat (limited to 'Solverv')
| -rw-r--r-- | Solverv/Models/SolsticeEvent.swift | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Solverv/Models/SolsticeEvent.swift b/Solverv/Models/SolsticeEvent.swift new file mode 100644 index 0000000..46c14ac --- /dev/null +++ b/Solverv/Models/SolsticeEvent.swift @@ -0,0 +1,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) + var 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) + } +} |
