IceCubesApp/Packages/Models/Sources/Models/Alias/ServerDate.swift

49 lines
1.4 KiB
Swift
Raw Normal View History

2022-11-25 11:00:01 +00:00
import Foundation
2022-11-25 09:03:42 +00:00
2022-12-17 12:37:46 +00:00
public typealias ServerDate = String
extension ServerDate {
2022-11-29 08:28:17 +00:00
private static var createdAtDateFormatter: DateFormatter {
let dateFormatter = DateFormatter()
dateFormatter.calendar = .init(identifier: .iso8601)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX"
dateFormatter.timeZone = .init(abbreviation: "UTC")
return dateFormatter
}
2023-01-17 10:36:01 +00:00
2022-11-29 08:28:17 +00:00
private static var createdAtRelativeFormatter: RelativeDateTimeFormatter {
let dateFormatter = RelativeDateTimeFormatter()
dateFormatter.unitsStyle = .abbreviated
return dateFormatter
}
2023-01-17 10:36:01 +00:00
2022-12-16 12:16:48 +00:00
private static var createdAtShortDateFormatted: DateFormatter {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
return dateFormatter
}
2023-01-17 10:36:01 +00:00
2022-12-17 12:37:46 +00:00
public var asDate: Date {
Self.createdAtDateFormatter.date(from: self)!
2022-11-25 09:03:42 +00:00
}
2023-01-17 10:36:01 +00:00
2022-12-17 12:37:46 +00:00
public var formatted: String {
2022-12-16 12:16:48 +00:00
let calendar = Calendar(identifier: .gregorian)
2022-12-17 12:37:46 +00:00
if calendar.numberOfDaysBetween(asDate, and: Date()) > 1 {
return Self.createdAtShortDateFormatted.string(from: asDate)
2022-12-16 12:16:48 +00:00
} else {
2022-12-17 12:37:46 +00:00
return Self.createdAtRelativeFormatter.localizedString(for: asDate, relativeTo: Date())
2022-12-16 12:16:48 +00:00
}
}
}
extension Calendar {
func numberOfDaysBetween(_ from: Date, and to: Date) -> Int {
let fromDate = startOfDay(for: from)
let toDate = startOfDay(for: to)
let numberOfDays = dateComponents([.day], from: fromDate, to: toDate)
2023-01-17 10:36:01 +00:00
2022-12-16 12:16:48 +00:00
return numberOfDays.day!
2022-11-25 11:00:01 +00:00
}
2022-11-25 09:03:42 +00:00
}