2016-06-13 20 views
0

我正在調用一個函數來檢查從日期開始的時間。這將決定timeLable如何顯示在我的消息視圖控制器中,類似於IMessage。NSDateFormatter。設置從swift中的日期起經過的時間

我使用下面只的代碼顯示HH:MM

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

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

我期待將其更改爲沿着線的東西:

  • 如果日期是當天日期= 「HH:MM」
  • 如果日期是昨天,日期=「昨天」
  • 如果日期是前天等日期=「週一,週二,週三......」
  • 如果日期超過1周,日期= MM/DD/YY
+0

看看NsCalendar,具體https://developer.apple.com/library/ mac/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class /#// apple_ref/occ/instm/NSCalendar/components:fromDate:toDate:options: –

+2

'(recent [「date」] as?String)!'我哭了。 – EmilioPelaez

+0

[iOS上的NSDate對人類友好日期描述的可能重複](http://stackoverflow.com/questions/6332298/human-friendly-date-descriptions-with-nsdate-on-ios) – kennytm

回答

1

或者試試這個。請注意,我們必須使用components:fromDate:,然後使用components:fromDateComponents:toDateComponents:options:,因爲如果我們不是昨晚23:59而是昨天23:59而不是昨天。

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

那麼現在,只使用它:

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