我有两个日期选择器,包含时间格式为上午7:00和下午8:00,用于登录和注销。这些时间可能有所不同我想更改注销时间,并尝试使用登录时间作为最短时间,但我的代码不起作用,我仍然可以选择时间如凌晨1:00或早上6:00作为退出。
这是我的ViewDidLoad
中的代码if let actualLoginText = loginTextField.text {
let start = actualLoginText
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
formattedTime = formatter.date(from: start)!
}
这是我的退出选择器的代码
@objc func timeOutPickerValueChanged(sender: UIDatePicker) {
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
timeOutPicker.minimumDate = Calendar.current.date(byAdding: .minute, value: 5, to: formattedTime)
logoutTextField.text = formatter.string(from: sender.date)
}
我也试过这个,但仍然没有工作
if let actualLoginText = loginTextField.text {
let start = actualLoginText
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
formattedTime = formatter.date(from: start)!
}
谢谢。
答案 0 :(得分:1)
使用日期/时间时,使用Date
个对象,而不是字符串。 "字符串表示"应仅用于向用户显示日期/时间,而不是用于操作值。
这是一个简单的示例(假设您添加了两个UIDatePickers
并连接了他们的Value Changed
个事件。加载时,它会将timeInPicker
初始化为当前日期/时间。每次选择新的" Time In"时,timeOutPicker.minimumDate
设置为距选定时间5分钟,timeOutPicker.maximumDate
设置为距最短时间8小时:
class ViewController: UIViewController {
@IBOutlet weak var timeInPicker: UIDatePicker!
@IBOutlet weak var timeOutPicker: UIDatePicker!
let dateFormatter: DateFormatter = {
let df = DateFormatter()
df.dateStyle = .short
df.timeStyle = .short
return df
}()
override func viewDidLoad() {
super.viewDidLoad()
// Initialize the TimeIn and TimeOut pickers to the current Date/Time
let now = Date()
updateTimeOutPicker(now)
}
func updateTimeOutPicker(_ withStartDateTime: Date) -> Void {
// add 5 minutes to the selected "In" time to get the "minimum time" for the Out Picker
guard let minDateTime = Calendar(identifier: .gregorian).date(byAdding: .minute, value: 5, to: withStartDateTime) else { return }
// add 8 hours to the to get the "maximum time" for the Out Picker
guard let maxDateTime = Calendar(identifier: .gregorian).date(byAdding: .hour, value: 8, to: minDateTime) else { return }
timeOutPicker.minimumDate = minDateTime
timeOutPicker.maximumDate = maxDateTime
print("New Min Out Time:", dateFormatter.string(from: minDateTime))
print("New Max Out Time:", dateFormatter.string(from: maxDateTime))
print()
}
@IBAction func timeInPickerValueChanged(_ sender: UIDatePicker) {
print("Selected In Time:", dateFormatter.string(from: sender.date))
print()
updateTimeOutPicker(sender.date)
}
@IBAction func timeOutPickerValueChanged(_ sender: UIDatePicker) {
print("Selected Out Time:", dateFormatter.string(from: sender.date))
print()
}
}
答案 1 :(得分:0)
登录和注销时间字符串是从数据库中提取的。当我不编辑登录文本字段时,它的数据仍然是字符串,因为没有值更改,所以我不得不使用字符串值作为我的注销选择器的引用。
结果登录名为:1999-12-31 23:00:00 +0000 并退出:2018-01-04 22:24:20 +0000
这就是为什么使用登录作为我的最短时间不起作用的原因
所以这就是我所做的,我添加了当前日期,以便我可以使用它。
@objc func timeOutPickerValueChanged(sender: UIDatePicker) {
if let actualLoginText = loginTextField.text {
let date = Date()
let start = actualLoginText
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let nowTime = formatter.string(from: date)
let concat = nowTime + " " + start
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm a"
formattedTime = dateFormatter.date(from: concat)!
}
let formatter = DateFormatter()
formatter.dateStyle = .none
formatter.timeStyle = .short
timeOutPicker.minimumDate = Calendar.current.date(byAdding: .minute, value: 5, to: formattedTime)
logoutTextField.text = formatter.string(from: sender.date)
}