ios-如何显示读取的日期;今天,4月14日;?

ios-如何显示读取的日期;今天,4月14日;?,ios,swift,nsdate,nsdateformatter,Ios,Swift,Nsdate,Nsdateformatter,我想介绍一些日期,内容如下 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

我想介绍一些日期,内容如下

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)
如果日期是今天,它可以正常工作,但是,对于其他日期,我得到了
“2017年4月5日,4月5日”


如何处理此问题?

根据日期是否为今天,您将需要两个完全不同的格式化程序
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"
 }

如果我们有更好的方法,请告诉我。这是一个利用本地化的相对日期格式的解决方案

它使用
日历的扩展名
,确定日期是昨天、今天还是明天:

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)
}

昨天、今天和明天的So的可能重复必须在日期格式化程序中将其设置为静态?@AshwinIndianic Yes,因为您希望有一个既相对又不相对的格式化程序。“今天”通常代替“4月14日”。这就是为什么您需要自定义解决方案。好的,我明白您的意思了,谢谢您帮助我提高知识水平。:)所有静态字符串都应该用引号括起来!e、 g.
'Today,'d MMMM
好的,谢谢,(y),我不知道(单引号)。