或者試試這個。請注意,我們必須使用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!)
看看NsCalendar,具體https://developer.apple.com/library/ mac/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class /#// apple_ref/occ/instm/NSCalendar/components:fromDate:toDate:options: –
'(recent [「date」] as?String)!'我哭了。 – EmilioPelaez
[iOS上的NSDate對人類友好日期描述的可能重複](http://stackoverflow.com/questions/6332298/human-friendly-date-descriptions-with-nsdate-on-ios) – kennytm