Skip to content

Instantly share code, notes, and snippets.

@chashmeetsingh
Created August 2, 2016 01:08
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chashmeetsingh/736b4898d0988888a2e6695455cb8edc to your computer and use it in GitHub Desktop.
Save chashmeetsingh/736b4898d0988888a2e6695455cb8edc to your computer and use it in GitHub Desktop.
"Time ago" function for Swift (based on MatthewYork's DateTools for Objective-C) *Swift 3
func timeAgoSinceDate(date:NSDate, numericDates:Bool) -> String {
let calendar = Calendar.current
let now = NSDate()
let earliest = now.earlierDate(date as Date)
let latest = (earliest == now) ? date : now
let components:NSDateComponents = calendar.components([Calendar.Unit.minute , Calendar.Unit.hour , Calendar.Unit.day , Calendar.Unit.weekOfYear , Calendar.Unit.month , Calendar.Unit.year , Calendar.Unit.second], from: earliest, to: latest as Date, options: Calendar.Options())
if (components.year >= 2) {
return "\(components.year) years ago"
} else if (components.year >= 1){
if (numericDates){
return "1 year ago"
} else {
return "Last year"
}
} else if (components.month >= 2) {
return "\(components.month) months ago"
} else if (components.month >= 1){
if (numericDates){
return "1 month ago"
} else {
return "Last month"
}
} else if (components.weekOfYear >= 2) {
return "\(components.weekOfYear) weeks ago"
} else if (components.weekOfYear >= 1){
if (numericDates){
return "1 week ago"
} else {
return "Last week"
}
} else if (components.day >= 2) {
return "\(components.day) days ago"
} else if (components.day >= 1){
if (numericDates){
return "1 day ago"
} else {
return "Yesterday"
}
} else if (components.hour >= 2) {
return "\(components.hour) hours ago"
} else if (components.hour >= 1){
if (numericDates){
return "1 hour ago"
} else {
return "An hour ago"
}
} else if (components.minute >= 2) {
return "\(components.minute) minutes ago"
} else if (components.minute >= 1){
if (numericDates){
return "1 minute ago"
} else {
return "A minute ago"
}
} else if (components.second >= 3) {
return "\(components.second) seconds ago"
} else {
return "Just now"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment