Date Formatting Extensions

Date extension with relative formatting, custom patterns, and date arithmetic helpers.

← Back
Language: swift | Tags: date formatting extension utilities
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)
    }
}