diff options
Diffstat (limited to 'Shared/Models/SolsticeEvent.swift')
| -rw-r--r-- | Shared/Models/SolsticeEvent.swift | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Shared/Models/SolsticeEvent.swift b/Shared/Models/SolsticeEvent.swift new file mode 100644 index 0000000..b28cba8 --- /dev/null +++ b/Shared/Models/SolsticeEvent.swift @@ -0,0 +1,34 @@ +import Foundation + +struct SolsticeEvent: Identifiable, Codable { + let id: UUID + let name: String + let date: Date + let season: Season + + init(name: String, date: Date, season: Season) { + self.id = UUID() + self.name = name + self.date = date + self.season = season + } + + 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 + } + + func daysUntil(from now: Date = Date()) -> Int { + let today = Calendar.current.startOfDay(for: now) + let eventDay = Calendar.current.startOfDay(for: date) + let components = Calendar.current.dateComponents([.day], from: today, to: eventDay) + return max(0, components.day ?? 0) + } +} |
