Files
timetracker/ios/TimeTracker/TimeTracker/Shared/Extensions/Date+Extensions.swift
2026-02-18 21:35:32 +01:00

67 lines
2.0 KiB
Swift

import Foundation
extension Date {
var startOfDay: Date {
Calendar.current.startOfDay(for: self)
}
var endOfDay: Date {
var components = DateComponents()
components.day = 1
components.second = -1
return Calendar.current.date(byAdding: components, to: startOfDay) ?? self
}
var startOfWeek: Date {
let calendar = Calendar.current
let components = calendar.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)
return calendar.date(from: components) ?? self
}
var endOfWeek: Date {
var components = DateComponents()
components.day = 7
components.second = -1
return Calendar.current.date(byAdding: components, to: startOfWeek) ?? self
}
func formatted(style: DateFormatter.Style) -> String {
let formatter = DateFormatter()
formatter.dateStyle = style
formatter.timeStyle = .none
return formatter.string(from: self)
}
func formattedTime() -> String {
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
return formatter.string(from: self)
}
func formattedDateTime() -> String {
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
return formatter.string(from: self)
}
var iso8601String: String {
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withInternetDateTime]
return formatter.string(from: self)
}
var iso8601FullDate: String {
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withFullDate]
return formatter.string(from: self)
}
static func fromISO8601(_ string: String) -> Date? {
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withInternetDateTime]
return formatter.date(from: string)
}
}