Swift:在减去Date时无法正确处理日期函数:

时间:2017-08-05 15:14:57

标签: ios swift uidatepicker

我试图将目前日期的最短日期设定为1987年。我已经成功实现了这一点,但我无法弄清楚为什么从现在几个月过去几个月都禁用字段。

就像今天的当月是8月那么如果我选择1987年作为年份,那么8月之前的月份将被禁用。我无法弄清楚为什么会发生这种情况?

这是我计算最大和最小日期的代码:

if(false) //you are assigning false to the b so the control will go to the else block   

1987年之后的日期工作正常。我想在1987年开始所有的月份和日期

2 个答案:

答案 0 :(得分:2)

它正在做的事情非常有意义。如果您构建一个1987年8月5日的日期,并将其安装为日期选择器的最短日期,那么您告诉日期选择器用户不应该选择比此更早的日期。如果用户选择1987年,那么比8月早一个月小于指定的最小日期。它不会让用户在1987年8月5日之前选择一个日期。

修改

如果您想在1987年允许任何日期,您应该在1987年1月1日的日期选择器中设置最小日期。您可以通过将月份和日期都设置为1来完成日期组件。

答案 1 :(得分:2)

如果您想从今天开始减去30年并获得年初(1月1日),请使用

let calendar = Calendar.current
var components = calendar.dateComponents([.year], from: Date())
components.year! -= 30
let minDate = calendar.date(from: components)!

它仅从当前日期中提取year组件并减去30.由于未指定monthday,因此分别考虑值为1。

代码是用Swift 3编写的,强烈建议更新。 Swift 4即将推出。