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

标签 ios cocoa-touch nsdate

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

最佳答案

以下是如何使用 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)
    }
}

关于ios - NSDate 中的时间/日期显示就像 iOS 中的消息和邮件应用程序一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21241690/

相关文章:

ios - 将一个 ViewController 部分呈现在另一个 ViewController 上

ios - 对于 alertController : what is the sourceView of a selected segment in a UISegmentedControl

ios - 如何将核心数据中每个对象的小数值相加得出总数?

objective-c - 从当前日期减去 7 天

ios - 阻止 UITableView 接收两次触摸(嵌套弹出动画会导致导航栏损坏)

ios - 无用的核心数据迁移错误 - 操作无法完成

iphone - 如何键值观察 CALayer 的旋转?

ios - 如何通过 Interface Builder 在 UIButton 中存储辅助信息?

ios - swift - 将字符串转换为日期,然后转换为不同格式的字符串

ios - NSDateFormatter dateFromString 返回错误的年份