gpt4 book ai didi

ios - Swift iOS doesRelativeDateFormatting 除了 "Today"和 "Yesterday"之外还有不同的值吗?

转载 作者:IT王子 更新时间:2023-10-29 05:20:55 25 4
gpt4 key购买 nike

我有许多日期,我试图使用相对日期来表示,例如“今天、昨天、1 周前、1 个月前”等...

这是我使用的 Swift 代码:

let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.doesRelativeDateFormatting = true
let uploadDate = dateFormatter.stringFromDate(date)

仅表示“今天”和“昨天”,其余日期如下所示:2014 年 11 月 24 日2014 年 11 月 17 日等等……

是否有另一种使用相对日期而不是实际日期来表示所有日期的方法?

最佳答案

编辑/更新:Xcode 8.3.2 • Swift 3.1

如果您使用扩展和 Calendar 方法来帮助您进行日历计算,这真的很容易:

extension Date {
var yearsFromNow: Int {
return Calendar.current.dateComponents([.year], from: self, to: Date()).year!
}
var monthsFromNow: Int {
return Calendar.current.dateComponents([.month], from: self, to: Date()).month!
}
var weeksFromNow: Int {
return Calendar.current.dateComponents([.weekOfYear], from: self, to: Date()).weekOfYear!
}
var daysFromNow: Int {
return Calendar.current.dateComponents([.day], from: self, to: Date()).day!
}
var isInYesterday: Bool {
return Calendar.current.isDateInYesterday(self)
}
var hoursFromNow: Int {
return Calendar.current.dateComponents([.hour], from: self, to: Date()).hour!
}
var minutesFromNow: Int {
return Calendar.current.dateComponents([.minute], from: self, to: Date()).minute!
}
var secondsFromNow: Int {
return Calendar.current.dateComponents([.second], from: self, to: Date()).second!
}
var relativeTime: String {
if yearsFromNow > 0 { return "\(yearsFromNow) year" + (yearsFromNow > 1 ? "s" : "") + " ago" }
if monthsFromNow > 0 { return "\(monthsFromNow) month" + (monthsFromNow > 1 ? "s" : "") + " ago" }
if weeksFromNow > 0 { return "\(weeksFromNow) week" + (weeksFromNow > 1 ? "s" : "") + " ago" }
if isInYesterday { return "Yesterday" }
if daysFromNow > 0 { return "\(daysFromNow) day" + (daysFromNow > 1 ? "s" : "") + " ago" }
if hoursFromNow > 0 { return "\(hoursFromNow) hour" + (hoursFromNow > 1 ? "s" : "") + " ago" }
if minutesFromNow > 0 { return "\(minutesFromNow) minute" + (minutesFromNow > 1 ? "s" : "") + " ago" }
if secondsFromNow > 0 { return secondsFromNow < 15 ? "Just now"
: "\(secondsFromNow) second" + (secondsFromNow > 1 ? "s" : "") + " ago" }
return ""
}
}

测试

let calendar =  Calendar.current

let date1 = DateComponents(calendar: calendar, year: 2016, month: 3, day: 14, hour: 22, minute: 39).date!
let date2 = DateComponents(calendar: calendar, year: 2019, month: 4, day: 18, hour: 22, minute: 39).date!
let date3 = DateComponents(calendar: calendar, year: 2019, month: 6, day: 2, hour: 12, minute: 38).date!
let date4 = DateComponents(calendar: calendar, year: 2019, month: 6, day: 14, hour: 3, minute: 0).date!
let date5 = DateComponents(calendar: calendar, year: 2019, month: 6, day: 17, hour: 23, minute: 45).date!
let date6 = DateComponents(calendar: calendar, year: 2019, month: 6, day: 18, hour: 19, minute: 17).date!
let timeOffset1 = date1.relativeTime // "3 years ago"
let timeOffset2 = date2.relativeTime // "1 month ago"
let timeOffset3 = date3.relativeTime // "2 weeks ago"
let timeOffset4 = date4.relativeTime // "4 days ago"
let timeOffset5 = date5.relativeTime // "Yesterday"
let timeOffset6 = date6.relativeTime // "Just now"

关于ios - Swift iOS doesRelativeDateFormatting 除了 "Today"和 "Yesterday"之外还有不同的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com