在日期选择器(Swift)中获取不可用的日期
我有一个UIDatePicker,从今天到下周(从Date()到Date().day+7)可以使用 假设今天是一个月的第30天,那么可以选择的日期是本月的第30天和下个月的第一到第六天 在这种情况下,我需要将datePicker month更改为next month,因为用户将day从30更改为1 但问题是: 当我将日期更改为无效日期时,.change方法将为我提供最不有效的日期 示例:在日期选择器(Swift)中获取不可用的日期,swift,uidatepicker,Swift,Uidatepicker,我有一个UIDatePicker,从今天到下周(从Date()到Date().day+7)可以使用 假设今天是一个月的第30天,那么可以选择的日期是本月的第30天和下个月的第一到第六天 在这种情况下,我需要将datePicker month更改为next month,因为用户将day从30更改为1 但问题是: 当我将日期更改为无效日期时,.change方法将为我提供最不有效的日期 示例: 假设: 今天=7月28日 可选择日期=7月28日至8月3日 我需要什么: 用户不能选择7月28日之前和8
假设:
我需要什么:
主要问题
只需将
UIDatePicker
的maximumDate属性设置为所需日期
func setupDatePicker(){
var currDateComponents = getDateComponents(fromDate: Date())
var maxDateComponents = currDateComponents
if let date = currDateComponents?.day{
maxDateComponents?.day = date + 7
}
self.datePicker?.maximumDate = getDate(fromDateComponents: maxDateComponents)
}
func getDateComponents(fromDate date: Date?)-> DateComponents?{
let calendar = Calendar(identifier: .gregorian)
var dateComponents: DateComponents? = nil
if(date != nil){
dateComponents = calendar.dateComponents([.day, .month, .year], from: date!)
}
return dateComponents
}
func getDate(fromDateComponents dateComponents:DateComponents?)-> Date?{
let calendar = Calendar(identifier: .gregorian)
if let componentsBasedDate = calendar.date(from: dateComponents!) {
return componentsBasedDate
}
return nil
}
在viewDidLoad中调用此函数以设置日历以设置最大和最小日期:
fileprivate func setupCalendar() {
datePicker.minimumDate = Calendar.current.date(byAdding: .day, value: 0, to: ServerTime.sharedInstance.nowTime)
datePicker.maximumDate = Calendar.current.date(byAdding: .day, value: +7, to: ServerTime.sharedInstance.nowTime)
}
对于计算显示日期和当前日期之间的天数,我使用了以下方法:
extension Date {
//Calculate days between two day objects
func daysBetween(_ date: Date) -> Int {
let calendar = NSCalendar.current
// Replace the hour (time) of both dates with 00:00
let date1 = calendar.startOfDay(for: date)
let date2 = calendar.startOfDay(for: self)
let components = calendar.dateComponents([.day], from: date1, to: date2)
return components.day ?? 0 // This will return the number of day(s) between dates
}
}}
事实上,在他们选择之前不可能得到日期。而且,根据更改月份之前下个月的天数不可用,我无法使用UIDatePicker来处理它 最后我实现了我的自定义UIPickerView 正如@holex所说
谢谢大家的回答。您是否为日期选择器设置了最小和最大日期?请根据您的逻辑将最小日期设置为当前日期,将最大日期设置为。@是的,我设置了,但我想自动更改月份!请您在我的示例中深入了解一下好吗?您的主要问题是您的用户无法在
UIDatePicker
中同时更改月份和日期,您需要实现自己的UIPickerView
仅包含这7天的内容,以便您的用户可以顺利滚动;这项工作不太复杂,但在完成选择后,您需要从当前行提取/创建/转换一个Date()
对象。@holex是的,我昨天终于这样做了。事实上,在他们选择之前不可能得到日期。根据更改月份前下个月的天数不可用,我无法使用UIDatePicker处理。我已设置了最大和最小日期。这个问题是另外一个问题,请你在我的例子中更深入地看一看好吗?非常感谢你的回答,但我认为除了@holex之外,没有人知道主要的问题。