Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have been researching, but I couldnt find exact solution for my problem. I have been trying to get 1 hour ago from a date. How can I achieve this in swift?

like image 461
saksut Avatar asked Dec 02 '14 14:12

saksut


Video Answer


2 Answers

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 now let earlyDate = NSCalendar.currentCalendar().dateByAddingUnit(        .Hour,        value: -1,         toDate: NSDate(),        options: []) 
like image 186
Vladimir Avatar answered Sep 26 '22 01:09

Vladimir


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 
like image 36
Sourabh Sharma Avatar answered Sep 23 '22 01:09

Sourabh Sharma