ios - 如何显示阅读日期"Today, 14 April"?
ios - How to display date read "Today, 14 April"?
我想展示一些日期
Yesterday, 13 April
Today, 14 April
Tomorrow, 15 April
Tuesday, 4 April
Wednesday 5 April
我试过了
let date = Date(timeIntervalSince1970: value)
let dayFormatter = DateFormatter()
dayFormatter.dateStyle = .medium
dayFormatter.doesRelativeDateFormatting = true
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "d MMMM"
whenLabel.text = dayFormatter.string(from: date) + ", " + dateFormatter.string(from: date)
如果日期是今天,它工作正常,但对于其他日期,我得到 “Apr 5, 2017, 5 April”
我怎样才能解决这个问题?
根据日期是否为今天,您将需要两个完全不同的格式化程序。 doesRelativeDateFormatting
无法帮助您处理复杂的格式。
首先检查:
if Calendar.current.isDateInToday(date) {
// use "Today, " + "d MMMM" pattern
} else {
// use "EEEE" pattern + "d MMMM" pattern
}
正如 Sulthan 所建议的,我只是来了解这种代码,
let mydate = Date()//my actual date need to display
let dateFormatter = DateFormatter()
if Calendar.current.isDateInToday(mydate) {
dateFormatter.dateFormat = "'Today,' d MMMM"
}
else if Calendar.current.isDateInYesterday(mydate) {
dateFormatter.dateFormat = "'Yesterday,' d MMMM"
}
else if Calendar.current.isDateInTomorrow(mydate) {
dateFormatter.dateFormat = "'Tomorrow,' d MMMM"
}
else{
dateFormatter.dateFormat = "EEEE, d MMMM"
}
如果我们有更好的方法,请告诉我。谢谢
只是为了好玩,这是一个利用本地化相对日期格式的解决方案。
它使用 Calendar
的扩展来确定日期是昨天、今天还是明天:
extension Calendar {
func isDateInYesterdayTodayTomorrow(_ date: Date) -> Bool
{
return self.isDateInYesterday(date) || self.isDateInToday(date) || self.isDateInTomorrow(date)
}
}
func relativeDateString(for date: Date, locale : Locale = Locale.current) -> String
{
let dayFormatter = DateFormatter()
dayFormatter.locale = locale
if Calendar.current.isDateInYesterdayTodayTomorrow(date) {
dayFormatter.dateStyle = .medium
dayFormatter.doesRelativeDateFormatting = true
} else {
dayFormatter.dateFormat = "EEEE"
}
let relativeWeekday = dayFormatter.string(from: date)
let dateFormatter = DateFormatter()
dateFormatter.locale = locale
dateFormatter.dateFormat = "d MMMM"
return relativeWeekday + ", " + dateFormatter.string(from: date)
}
我想展示一些日期
Yesterday, 13 April
Today, 14 April
Tomorrow, 15 April
Tuesday, 4 April
Wednesday 5 April
我试过了
let date = Date(timeIntervalSince1970: value)
let dayFormatter = DateFormatter()
dayFormatter.dateStyle = .medium
dayFormatter.doesRelativeDateFormatting = true
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "d MMMM"
whenLabel.text = dayFormatter.string(from: date) + ", " + dateFormatter.string(from: date)
如果日期是今天,它工作正常,但对于其他日期,我得到 “Apr 5, 2017, 5 April”
我怎样才能解决这个问题?
根据日期是否为今天,您将需要两个完全不同的格式化程序。 doesRelativeDateFormatting
无法帮助您处理复杂的格式。
首先检查:
if Calendar.current.isDateInToday(date) {
// use "Today, " + "d MMMM" pattern
} else {
// use "EEEE" pattern + "d MMMM" pattern
}
正如 Sulthan 所建议的,我只是来了解这种代码,
let mydate = Date()//my actual date need to display
let dateFormatter = DateFormatter()
if Calendar.current.isDateInToday(mydate) {
dateFormatter.dateFormat = "'Today,' d MMMM"
}
else if Calendar.current.isDateInYesterday(mydate) {
dateFormatter.dateFormat = "'Yesterday,' d MMMM"
}
else if Calendar.current.isDateInTomorrow(mydate) {
dateFormatter.dateFormat = "'Tomorrow,' d MMMM"
}
else{
dateFormatter.dateFormat = "EEEE, d MMMM"
}
如果我们有更好的方法,请告诉我。谢谢
只是为了好玩,这是一个利用本地化相对日期格式的解决方案。
它使用 Calendar
的扩展来确定日期是昨天、今天还是明天:
extension Calendar {
func isDateInYesterdayTodayTomorrow(_ date: Date) -> Bool
{
return self.isDateInYesterday(date) || self.isDateInToday(date) || self.isDateInTomorrow(date)
}
}
func relativeDateString(for date: Date, locale : Locale = Locale.current) -> String
{
let dayFormatter = DateFormatter()
dayFormatter.locale = locale
if Calendar.current.isDateInYesterdayTodayTomorrow(date) {
dayFormatter.dateStyle = .medium
dayFormatter.doesRelativeDateFormatting = true
} else {
dayFormatter.dateFormat = "EEEE"
}
let relativeWeekday = dayFormatter.string(from: date)
let dateFormatter = DateFormatter()
dateFormatter.locale = locale
dateFormatter.dateFormat = "d MMMM"
return relativeWeekday + ", " + dateFormatter.string(from: date)
}