Swift 中的日期格式今天明天昨天

Posted

技术标签:

【中文标题】Swift 中的日期格式今天明天昨天【英文标题】:Date format in Swift TODAY TOMORROW YESTERDAY 【发布时间】:2020-09-16 07:16:30 【问题描述】:

我想将日期显示为 6 月 13 日星期六

如果日期是当天,它应该像 明天昨天那样显示 今天

我无法同时实现

guard let date = Date(fromString: "16 September 2020",
                      format: "dd MMMM yyyy") else  return nil 

        let dateFormatter = DateFormatter()
        dateFormatter.dateStyle = .medium
        dateFormatter.doesRelativeDateFormatting = true

        header.titleLabel.text = dateFormatter.string(from: date)

对于上面的代码,我可以将日期显示为 今天 明天 昨天,但其他日期没有显示 6 月 13 日星期六强>。我尝试将日期格式 dateFormatter.dateFormat = "EEEE, MMM d" 应用于相同的 dateFormatter 它什么也没返回。

【问题讨论】:

基本代码似乎对我有用,2天前显示14 Sep 2020,1天前显示Yesterday,今天显示Today,1天后显示Tomorrow和2 天后的节目 18 Sep 2020 - 我会更专注于你的解析器 你能显示Date.init(fromString:format:)的代码吗? 【参考方案1】:

在设置 doesRelativeDateFormatting = true 并尝试同时应用自定义格式时,DateFormatter 表现不佳。所以最简单的解决方案是使用StyleLocale给出的格式

let relativeDateFormatter = DateFormatter()
relativeDateFormatter.timeStyle = .none
relativeDateFormatter.dateStyle = .medium
relativeDateFormatter.locale = Locale(identifier: "en_GB")
relativeDateFormatter.doesRelativeDateFormatting = true

例子

let inputFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd"

let dates = ["2020-09-01", "2020-09-15", "2020-09-16", "2020-09-30"].compactMap  inputFormatter.date(from: $0)

for date in dates 
    print(relativeDateFormatter.string(from: date))

2020 年 9 月 1 日 昨天 今天 2020 年 9 月 30 日

现在,如果您想应用自定义格式,我在使用相同的 DateFormatter 实例时没有找到解决方案,因此我们需要为自定义格式创建一个新格式并将其与检查一起使用,以便我们应用自定义仅当它不是今天等时才格式化

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, MMM dd"

for date in dates 
    let string = relativeDateFormatter.string(from: date)
    if let _ = string.rangeOfCharacter(from: .decimalDigits) 
         print(dateFormatter.string(from: date))
     else 
        print(string)
    

9 月 1 日,星期二 昨天 今天 9 月 30 日,星期三

【讨论】:

【参考方案2】:

您也可以使用RelativeDateFormatter。这是一个例子:

let date = Date().addingTimeInterval(-4 * 24 * 60 * 60)

let formatter = RelativeDateTimeFormatter()
formatter.unitsStyle = .full

let relativeDate = formatter.localizedString(for: date, relativeTo: Date())

print(relativeDate) // 4 days ago

【讨论】:

以上是关于Swift 中的日期格式今天明天昨天的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Swift 中将日期转换为特定格式

Moment.js - 明天、今天和昨天

python代码获取今天昨天明天的日期

js获取日期:前天,昨天,今天,明天,后天

MySQL 日期函数 今天明天昨天......

MySQL 日期函数 今天明天昨天......