微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift的日期格式TODAY TOMORROW YESTERDAY

如何解决Swift的日期格式TODAY TOMORROW YESTERDAY

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

如果日期是当前日期,则应显示 Today (今天),就像 Tomorrow (明天),昨天一样。

我两个都做不到

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,但未返回任何内容

解决方法

设置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月01日,星期二
昨天
今天
9月30日,星期三

,

您也可以使用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。