Date Formatting Extensions
Date extension with relative formatting, custom patterns, and date arithmetic helpers.
extension Date {
/// Format date as relative time (e.g., "2 hours ago")
var relativeFormatted: String {
let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full
return formatter.localizedString(for: self, relativeTo: Date())
}
/// Format date with custom pattern
func formatted(as pattern: String, locale: Locale = .current) -> String {
let formatter = DateFormatter()
formatter.dateFormat = pattern
formatter.locale = locale
return formatter.string(from: self)
}
/// Common date formats
var shortDate: String { formatted(as: "MM/dd/yyyy") }
var longDate: String { formatted(as: "MMMM d, yyyy") }
var timeOnly: String { formatted(as: "h:mm a") }
var iso8601: String { formatted(as: "yyyy-MM-dd'T'HH:mm:ssZ") }
/// Date arithmetic
func adding(_ component: Calendar.Component, value: Int) -> Date {
Calendar.current.date(byAdding: component, value: value, to: self) ?? self
}
var startOfDay: Date {
Calendar.current.startOfDay(for: self)
}
}