summaryrefslogtreecommitdiffstats
path: root/Shared/Models/SolsticeEvent.swift
diff options
context:
space:
mode:
authorivar <i@oiee.no>2026-05-06 21:01:10 +0200
committerivar <i@oiee.no>2026-05-06 21:01:10 +0200
commit01eee1c4fe8252bffc9334e4bb2dbbc15f002835 (patch)
treedba40ea6312844c66183043058cfead8b0a5c9d3 /Shared/Models/SolsticeEvent.swift
parent7328b2e18121d3047ac142eaf0c8b048933d17dc (diff)
downloadsolverv-01eee1c4fe8252bffc9334e4bb2dbbc15f002835.tar.xz
solverv-01eee1c4fe8252bffc9334e4bb2dbbc15f002835.zip
feat: add Shared/ folder with merged source files
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)
+ }
+}