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