swift - NSDateFormatter。快速设置自日期以来耗时

标签 swift time nsdateformatter

我想调用一个函数来检查自日期以来耗时。这将决定 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/

相关文章:

time - 寻找好的 FILETIME 转换器

javascript - 如何反转 JavaScript 中现有的正则表达式?

swift - 如何处理两种可能的日期格式?

iphone - 如何用 NSDateFormatter 解析这些时区?

iOS - 更改 NSDate 格式使所有日期成为一月

ios - 动画: moving a UIView up and off the screen by its height - SWIFT

ios - 在 Swift 4 中使用 KeyEnumerators

swift - 如何为多种数字类型制作通用函数?

ios - 选择另一个选项卡时如何更改文本字段的背景颜色?

go - 如何在 Go 中解析日历周数