我想调用一个函数来检查自日期以来耗时。这将决定 timeLable 如何在我的消息 View Controller 中显示,类似于 IMessage。
我在下面使用的代码只显示 HH:MM
let date = dateFormatter().dateFromString((recent["date"] as? String)!)
timeLabel.text = NSDateFormatter.localizedStringFromDate(date!, dateStyle: NSDateFormatterStyle.NoStyle, timeStyle: NSDateFormatterStyle.NoStyle)
我希望将其更改为以下内容:
- 如果日期是今天,date = "HH:MM"
- 如果日期是昨天,date = "Yesterday"
- 如果date是前天等等,date = "Monday, Tuesday, Wednesday..."
- 如果日期超过 1 周,则日期 = MM/DD/YY
最佳答案
或者试试这个。请注意,我们必须使用 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!)
关于swift - NSDateFormatter。快速设置自日期以来耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793379/