2016-06-13 8 views
0

Ich bin auf der Suche nach einer Funktion, die seit dem Datum verstrichene Zeit überprüft. Dadurch wird festgelegt, wie das timeLable in meinem Nachrichtenansicht-Controller ähnlich wie IMessage angezeigt wird.NSDateFormatter. Einstellung der Zeit seit dem Datum in Swift

Der Code, den ich unten nur mit bin zeigt HH: MM

let date = dateFormatter().dateFromString((recent["date"] as? String)!) 

timeLabel.text = NSDateFormatter.localizedStringFromDate(date!, dateStyle: NSDateFormatterStyle.NoStyle, timeStyle: NSDateFormatterStyle.NoStyle) 

Ich suche es entlang der Linien von etwas zu ändern:

  • Wenn Datum heute ist, date = "HH: MM"
  • Wenn Datum ist gestern date = "Yesterday"
  • Wenn Datum am Tag vor gestern ist und so weiter, date = "Montag, Dienstag, Mittwoch ..."
  • Wenn das Datum länger als 1 Woche ist, Datum = MM/TT/JJ
+0

Werfen Sie einen Blick auf NSCalendar, speziell https://developer.apple.com/library/ mac/documentation/Cocoa/Referenz/Foundation/Classes/NSCalendar_Class/# // apple_ref/occ/instm/NSCalendar/Komponenten: fromDate: toDate: Optionen: –

+2

'(letzter [" date "] als? String)!' dies macht ich weine. – EmilioPelaez

+0

Mögliches Duplikat von [Menschenfreundliche Datumsbeschreibungen mit NSDate auf iOS] (http://stackoverflow.com/questions/6332298/human-friendly-date-descriptions-with-nsdate-on-ios) – kennytm

Antwort

1

Oder versuchen Sie es. Beachten Sie, dass wir components:fromDate: verwenden müssen und dann components:fromDateComponents:toDateComponents:options: verwenden, denn wenn wir nicht 23:59 letzte Nacht zurückkehren, wird 23:59 anstelle von Gestern zurückgegeben.

extension NSDateFormatter { 
    static func friendlyStringForDate(date:NSDate) -> String { 
     // Fetch the default calendar 
     let calendar = NSCalendar.currentCalendar() 

     // Compute components from target date 
     let from = calendar.components([.Day, .Month, .Year], fromDate: date) 

     // Compute components from current date 
     let to = calendar.components([.Day, .Month, .Year], fromDate: NSDate()) 

     // Compute days difference between the two 
     let delta = calendar.components(.Day, fromDateComponents: from, toDateComponents: to, options: []) 

     switch delta.day { 
     case 0: 
      let formatter = NSDateFormatter() 
      formatter.timeZone = NSTimeZone.defaultTimeZone() 
      formatter.dateFormat = "HH:mm" 
      return formatter.stringFromDate(date) 

     case 1: 
      return "Yesterday" 

     case 2..<7: 
      let formatter = NSDateFormatter() 
      formatter.timeStyle = .NoStyle 
      formatter.dateFormat = "EEEE" 
      return formatter.stringFromDate(date) 

     default: 
      let formatter = NSDateFormatter() 
      formatter.timeStyle = .NoStyle 
      formatter.dateFormat = "MM/dd/YY" 
      return formatter.stringFromDate(date) 
     } 
    } 
} 

Nun, es zu benutzen Sie einfach:

timeLabel.text = NSDateFormatter.friendlyStringForDate(date!) 
0

SWIFT 3:

extension DateFormatter { 

    static func friendlyStringForDate(date: Date) -> String { 
     // Fetch the default calendar 
     let calendar = Calendar.current 
     let unitFlags: NSCalendar.Unit = [.day] 

     // Compute days difference between the two 
     let delta = (calendar as NSCalendar).components(unitFlags, from: date, to: Date(), options: []) 

     if let day = delta.day { 

      switch day { 
      case 0: 
       let formatter = DateFormatter() 
       formatter.timeZone = NSTimeZone.default 
       formatter.dateFormat = "hh:mm a" 
       return formatter.string(from: date) 

      case 1: 
       return "Yesterday" 

      case 2..<7: 
       let formatter = DateFormatter() 
       formatter.timeStyle = .none 
       formatter.dateFormat = "EEEE" 
       return formatter.string(from: date) 

      default: 
       let formatter = DateFormatter() 
       formatter.timeStyle = .none 
       formatter.dateFormat = "MM/dd/YY" 
       return formatter.string(from: date) 
      } 
     } 
     return "" 
    } 
} 
Verwandte Themen