2016-06-13 6 views
0

私は、日付から経過した時間をチェックする関数を呼び出すことを検討しています。これにより、IMessageと同様に、メッセージ表示コントローラにtimeLableがどのように表示されるかが決まります。私はの線に沿って何かにそれを変更しているよNSDateFormatter。スウィフトでの日付からの経過時間の設定

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

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

MM:

私だけの下に使用しているコードは、HHを示し

  • 日がある場合は、今日、日付= 「HH:MM」
  • 日はそうで一昨日であるとした場合、日付は昨日、日付=「昨日」
  • ある場合は、日付=「月曜日、火曜日、水曜日...」
  • 日付が1週間以上の場合は、日付= MM/DD/YY
+0

NsCalendarを見てみましょう、特にhttps://developer.apple.com/library/ NSCalendar_Class /#// apple_ref/occ/instm/NSCalendar/components:fromDate:toDate:options: –

+2

'(最近の[日付]]?文字列)!これは、私は叫ぶ。 – 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 "" 
    } 
} 
関連する問題