How to get 1 hour ago from a date in iOS swift? How to get 1 hour ago from a date in iOS swift? ios ios

How to get 1 hour ago from a date in iOS swift?


For correct calculations involving NSDate that take into account all edge cases of different calendars (e.g. switching between day saving time) you should use NSCalendar class:

Swift 3+

let earlyDate = Calendar.current.date(  byAdding: .hour,   value: -1,   to: Date())

Older

// Get the date that was 1hr before nowlet earlyDate = NSCalendar.currentCalendar().dateByAddingUnit(       .Hour,       value: -1,        toDate: NSDate(),       options: [])


Use this method and paste in your helper class.

Updated for Swift 3 and Xcode 8.3

class func timeAgoSinceDate(_ date:Date,currentDate:Date, numericDates:Bool) -> String {    let calendar = Calendar.current    let now = currentDate    let earliest = (now as NSDate).earlierDate(date)    let latest = (earliest == now) ? date : now    let components:DateComponents = (calendar as NSCalendar).components([NSCalendar.Unit.minute , NSCalendar.Unit.hour , NSCalendar.Unit.day , NSCalendar.Unit.weekOfYear , NSCalendar.Unit.month , NSCalendar.Unit.year , NSCalendar.Unit.second], from: earliest, to: latest, options: NSCalendar.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"    }    }

Use of this method:

var timeAgo:String=AppHelper.timeAgoSinceDate(date, numericDates: true)Print("\(timeAgo)")   // Ex- 1 hour ago


Please read the NSDate class reference.

let oneHourAgo = NSDate.dateWithTimeIntervalSinceNow(-3600)

should do it.

Or, for any NSDate object:

let oneHourBack = myDate.dateByAddingTimeInterval(-3600)

Swift 4:

let oneHourAgo = NSDate(timeIntervalSinceNow: -3600)