Last active
October 12, 2016 17:32
-
-
Save mminer/d0840a31efda20b2a47e0fb222f76e46 to your computer and use it in GitHub Desktop.
Date extension to display the date in relative terms (e.g. "5 hours ago").
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Adapted from http://stackoverflow.com/a/1248 | |
private let minuteInterval: TimeInterval = 60 | |
private let hourInterval: TimeInterval = 60 * minuteInterval | |
private let dayInterval: TimeInterval = 24 * hourInterval | |
private let monthInterval: TimeInterval = 30 * dayInterval | |
extension Date { | |
var relative: String { | |
// Adapted from http://stackoverflow.com/a/1248 | |
let delta = timeIntervalSinceNow * -1 | |
switch delta { | |
case _ where delta < 0: | |
return "in the future" | |
case _ where delta < 1 * minuteInterval: | |
let seconds = relativeComponents.second ?? 0 | |
return seconds == 1 ? "one second ago" : "\(seconds) seconds ago" | |
case _ where delta < 2 * minuteInterval: | |
return "a minute ago" | |
case _ where delta < 45 * minuteInterval: | |
let minutes = relativeComponents.minute ?? 0 | |
return "\(minutes) minutes ago" | |
case _ where delta < 90 * minuteInterval: | |
return "an hour ago" | |
case _ where delta < 24 * hourInterval: | |
let hours = relativeComponents.hour ?? 0 | |
return "\(hours) hours ago" | |
case _ where delta < 48 * hourInterval: | |
return "yesterday" | |
case _ where delta < 30 * dayInterval: | |
let days = relativeComponents.day ?? 0 | |
return "\(days) days ago" | |
case _ where delta < 12 * monthInterval: | |
let months = relativeComponents.month ?? 0 | |
return months <= 1 ? "one month ago" : "\(months) months ago" | |
default: | |
let years = relativeComponents.year ?? 0 | |
return years <= 1 ? "one year ago" : "\(years) years ago" | |
} | |
} | |
private var relativeComponents: DateComponents { | |
return Calendar.current.dateComponents( | |
[.year, .month, .day, .hour, .minute, .second], | |
from: self, | |
to: Date() // now | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment