gpt4 book ai didi

ios - 用户选择日期后无法显示 "Today"而不是今天的日期

转载 作者:行者123 更新时间:2023-12-01 18:35:00 25 4
gpt4 key购买 nike

我正在制作一个日志应用程序,用户可以在其中编辑日期时间标签。当用户点击标签时,它会弹出一个 UIDatePicker。我想这样当他们保存日期时,如果它是“今天”,那么标签不会更新以显示今天的日期,而是显示“今天”这个词。这是我在日历、日记、健身和任何其他允许用户编辑条目日志日期的应用程序中看到的。

当用户最初打开 View 并看到当前日期和时间(编程 UI)时,它会正确显示:

let dateTimePicker: UIDatePicker = {
let picker = UIDatePicker()
picker.datePickerMode = .dateAndTime
picker.timeZone = NSTimeZone.local
picker.backgroundColor = UIColor.white
return picker
}()

let dateTimeLabel: UILabel = {
let now = Date()
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")
dateFormatter.setLocalizedDateFormatFromTemplate("h:mm")
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.attributedText = NSAttributedString(string: "Today, " + dateFormatter.string(from: now), attributes:[.underlineStyle: NSUnderlineStyle.single.rawValue])

return label
}()

日期选择器作为弹出框打开。当用户单击“取消”时,日期和时间保持不变。当用户更改日期和/或时间并单击“保存”时, dateTimeLabel相应地更新。但是,如果它显示“今天,___”并且用户单击“保存”,则标签会将其更新为当前日期。

这是我尝试过的:
@objc func saveTapped() {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US")

let now = Date()
if dateTimePicker.date == now {
dateFormatter.setLocalizedDateFormatFromTemplate("h:mm")
dateTimeLabel.text = "Today, " + dateFormatter.string(from: now)
} else {
dateFormatter.setLocalizedDateFormatFromTemplate("MMMd h:mm")
dateTimeLabel.text = dateFormatter.string(from: dateTimePicker.date)
}

removePopoverView()
}

Gif 显示它当前正在做什么(我希望它在 dateTimeLabel 上显示“今天”而不是“4 月 17 日”,当用户单击“保存” https://makeagif.com/i/v9mrKs

最佳答案

您可以使用日历方法 isDateInToday 检查日期是否与今天在同一天:

if Calendar.current.isDateInToday(dateTimePicker.date) {
// your code ...
} else if Calendar.current.isDateInYesterday(dateTimePicker.date) {
// your code ...
} else {
// your code ...
}

请注意 DateFormatter有一个名为 doesRelativeDateFormatting 的属性正是为了这个目的。您只需将其设置为 true ,它就会为您处理它,并具有显示本地化字符串的优势:
let date1 = DateComponents(calendar: .current, year: 2020, month: 4, day: 18, hour: 1).date!
let date2 = DateComponents(calendar: .current, year: 2020, month: 4, day: 17, hour: 23).date!

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

dateFormatter.string(for: date1) // "Today at 1:00 AM"
dateFormatter.string(for: date2) // "Yesterday at 11:00 PM"

关于ios - 用户选择日期后无法显示 "Today"而不是今天的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61285052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com