Skip to content

Instantly share code, notes, and snippets.

@hardikamal
Forked from minorbug/timeago.swift
Created January 20, 2018 13:19
Show Gist options
  • Select an option

  • Save hardikamal/308012b2b79c8c6bbc95b83ac220381b to your computer and use it in GitHub Desktop.

Select an option

Save hardikamal/308012b2b79c8c6bbc95b83ac220381b to your computer and use it in GitHub Desktop.

Revisions

  1. @minorbug minorbug created this gist Nov 7, 2014.
    63 changes: 63 additions & 0 deletions timeago.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,63 @@
    func timeAgoSinceDate(date:NSDate, numericDates:Bool) -> String {
    let calendar = NSCalendar.currentCalendar()
    let unitFlags = NSCalendarUnit.CalendarUnitMinute | NSCalendarUnit.CalendarUnitHour | NSCalendarUnit.CalendarUnitDay | NSCalendarUnit.CalendarUnitWeekOfYear | NSCalendarUnit.CalendarUnitMonth | NSCalendarUnit.CalendarUnitYear | NSCalendarUnit.CalendarUnitSecond
    let now = NSDate()
    let earliest = now.earlierDate(date)
    let latest = (earliest == now) ? date : now
    let components:NSDateComponents = calendar.components(unitFlags, fromDate: earliest, toDate: latest, options: nil)

    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"
    }

    }