Skip to content

Instantly share code, notes, and snippets.

@vikdenic
Created March 24, 2016 00:39
Show Gist options
  • Save vikdenic/988d6f3920b7b7950d40 to your computer and use it in GitHub Desktop.
Save vikdenic/988d6f3920b7b7950d40 to your computer and use it in GitHub Desktop.
Hours ago NSDate() extension
extension NSDate {
func timeAgoSinceDate(numericDates:Bool) -> String {
let calendar = NSCalendar.currentCalendar()
let now = NSDate()
let earliest = now.earlierDate(self)
let latest = (earliest == now) ? self : now
let components:NSDateComponents = calendar.components([NSCalendarUnit.Minute , NSCalendarUnit.Hour , NSCalendarUnit.Day , NSCalendarUnit.WeekOfYear , NSCalendarUnit.Month , NSCalendarUnit.Year , NSCalendarUnit.Second], fromDate: earliest, toDate: latest, options: NSCalendarOptions())
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"
}
}
}
@Piraban
Copy link

Piraban commented Mar 25, 2016

could you please tell me how to call this.

let timeAgo:String = NSDate.timeAgoSinceDate((comments.createdAt)!);

I got error message
Cannot convert value of type '(Bool) -> String' to specified type 'String'

@Kalianey
Copy link

Kalianey commented Jul 5, 2016

Since it's an extension of NSDate, you should use it like this:
comments.createdAt.timeAgoSinceDate(true)

@crazyfree
Copy link

i got problem with Xcode 8.3. Please have a look onto it. Thank you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment