NSDate 中的时间/日期显示就像 iOS 中的消息和邮件应用程序一样

Dev*_*ali 2 cocoa-touch nsdate ios

我正在构建一个应用程序,要求我显示时间和日期,即星期日(如果对象是在 24 小时之前创建的)等。就像 iOS 中的消息和邮件应用程序会显示 24 小时的时间,然后将其更改为显示“星期一”等日期,星期二......”。我正在寻找是否可以找到任何完全像这样的框架,或者我是否必须为此编写代码?

MQL*_*QLN 8

以下是如何使用 Swift 4 和 5 本地完成这一切:

extension Date {

    func formatRelativeString() -> String {
        let dateFormatter = DateFormatter()
        let calendar = Calendar(identifier: .gregorian)
        dateFormatter.doesRelativeDateFormatting = true

        if calendar.isDateInToday(self) {
            dateFormatter.timeStyle = .short
            dateFormatter.dateStyle = .none
        } else if calendar.isDateInYesterday(self){
            dateFormatter.timeStyle = .none
            dateFormatter.dateStyle = .medium
        } else if calendar.compare(Date(), to: self, toGranularity: .weekOfYear) == .orderedSame {
            let weekday = calendar.dateComponents([.weekday], from: self).weekday ?? 0
            return dateFormatter.weekdaySymbols[weekday-1]
        } else {
            dateFormatter.timeStyle = .none
            dateFormatter.dateStyle = .short
        }

        return dateFormatter.string(from: self)
    }
}
Run Code Online (Sandbox Code Playgroud)