用户选择日期后无法显示“今天”,而不是今天的日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户选择日期后无法显示“今天”,而不是今天的日期相关的知识,希望对你有一定的参考价值。
我正在制作日记应用,用户可以在其中编辑日期时间标签。当用户点击标签时,它会弹出一个UIDatePicker。我要这样做,以便当他们保存日期时,如果它是用于“今天”,那么标签将不会更新以显示今天的日期,而是显示“今天”一词。这是我在“日历”,“日记”,“健身”以及任何其他可让用户编辑输入日志日期的应用程序中看到的内容。
当用户最初打开视图并看到当前日期和时间(程序化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
时在https://makeagif.com/i/v9mrKs上显示“今天”而不是“ 4月17日”
答案
这里如何检查2日期是否是同一天
func isSameDay(date1: Date, date2: Date) -> Bool {
let diff = Calendar.current.dateComponents([.day], from: date1, to: date2)
if diff.day == 0 {
return true
} else {
return false
}
}
以上是关于用户选择日期后无法显示“今天”,而不是今天的日期的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Dojo的DatePicker控件制作联动日期选择器
jQuery DatePicker:点击今天然后完成时,不保留今天的日期