Swiftui 如何使用DateFormatter显示昨天、今天和明天
目前,我一直在尝试不同的方法来实现这一壮举。 我在这里格式化它的方式生成当前日期8月30日下午6:28Swiftui 如何使用DateFormatter显示昨天、今天和明天,swiftui,dateformatter,Swiftui,Dateformatter,目前,我一直在尝试不同的方法来实现这一壮举。 我在这里格式化它的方式生成当前日期8月30日下午6:28 import SwiftUI struct TestDate: View { var time = Date() var dateFormatter: DateFormatter { let df = DateFormatter() df.dateFormat = "MMM d, h:mm a" return df } var body: s
import SwiftUI
struct TestDate: View {
var time = Date()
var dateFormatter: DateFormatter {
let df = DateFormatter()
df.dateFormat = "MMM d, h:mm a"
return df
}
var body: some View {
Text("\(time, formatter: dateFormatter)")
}
}
这正是我想要的。但是,我希望显示昨天、今天和明天,而不是“8月30日”/相对当前日期。如何在SwiftUI中实现这一点
编辑:我的意思是当我使用日期选择器并更新日期时。我希望字符串不是“8月29日,下午6:50”,而是“昨天,下午6:50”。所有超过昨天和明天的日期都将显示为“mmmd,h:mma”您需要
doesRelativeDateFormatting
(不要忘记添加样式),例如:
在@Asperi所说的基础上构建。我实现这一点的方法是,我编写了一个函数,以我想要的方式格式化
import SwiftUI
struct TestDate: View {
var time = Date()
var body: some View {
Text("\(format(date: time))")
}
//this is where the function is I'm sure this could be cleaned up but here it is in its long form.
func format(date: Date) -> String {
let calendar = Calendar.current
if calendar.isDateInToday(date){
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
df.doesRelativeDateFormatting = true
return df.string(from: date)
}
else if calendar.isDateInYesterday(date){
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
df.doesRelativeDateFormatting = true
return df.string(from: date)
}
else if calendar.isDateInTomorrow(date){
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
df.doesRelativeDateFormatting = true
return df.string(from: date)
} else {
let df = DateFormatter()
df.dateFormat = "MMM d, h:mm a"
return df.string(from: date)
}
}
我的猜测是修改时间变量,可能是减去一天,或者分别添加一天。例如,我添加了一个编辑来澄清我的意图。我的道歉当昨天、今天、明天被超过时,剩余的格式是MM dd、yyyy在h:MM a。如何保留MMM d,h:mm a格式?
import SwiftUI
struct TestDate: View {
var time = Date()
var body: some View {
Text("\(format(date: time))")
}
//this is where the function is I'm sure this could be cleaned up but here it is in its long form.
func format(date: Date) -> String {
let calendar = Calendar.current
if calendar.isDateInToday(date){
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
df.doesRelativeDateFormatting = true
return df.string(from: date)
}
else if calendar.isDateInYesterday(date){
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
df.doesRelativeDateFormatting = true
return df.string(from: date)
}
else if calendar.isDateInTomorrow(date){
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
df.doesRelativeDateFormatting = true
return df.string(from: date)
} else {
let df = DateFormatter()
df.dateFormat = "MMM d, h:mm a"
return df.string(from: date)
}
}