summaryrefslogtreecommitdiffstats
path: root/Shared/Models/SolsticeEvent.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Shared/Models/SolsticeEvent.swift')
-rw-r--r--Shared/Models/SolsticeEvent.swift34
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)
+ }
+}