日期格式 Swift TODAY TOMORROW YESTERDAY
Date format in Swift TODAY TOMORROW YESTERDAY
我想将日期显示为 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
应用日期格式 dateFormatter.dateFormat = "EEEE, MMM d"
但它什么也没返回。
DateFormatter 在设置 doesRelativeDateFormatting = true
并尝试同时应用自定义格式时表现不佳。所以最简单的解决方案是使用 Style
和 Locale
给出的格式
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: [=11=])}
for date in dates {
print(relativeDateFormatter.string(from: date))
}
1 Sep 2020
Yesterday
Today
30 Sep 2020
现在,如果您想应用自定义格式,我在使用相同的 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)
}
}
Tuesday, Sep 01
Yesterday
Today
Wednesday, Sep 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
我想将日期显示为 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
应用日期格式 dateFormatter.dateFormat = "EEEE, MMM d"
但它什么也没返回。
DateFormatter 在设置 doesRelativeDateFormatting = true
并尝试同时应用自定义格式时表现不佳。所以最简单的解决方案是使用 Style
和 Locale
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: [=11=])}
for date in dates {
print(relativeDateFormatter.string(from: date))
}
1 Sep 2020
Yesterday
Today
30 Sep 2020
现在,如果您想应用自定义格式,我在使用相同的 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)
}
}
Tuesday, Sep 01
Yesterday
Today
Wednesday, Sep 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