如何检查几年前用户选择的NSDate是否发生过?

Luk*_*asz 2 iphone nsdate nscalendar

在我的应用程序中,我需要检查用户是否已满18岁.我为他提供了UIDatePickerView,他选择了他的生日日期.我将它存储在NSDate字段中.如何检查自生日以来已经过去18年了?

Joh*_*ger 10

[[[NSCalendar currentCalendar] components:NSYearCalendarUnit fromDate:birthDate toDate:[NSDate date] options:0] year]
Run Code Online (Sandbox Code Playgroud)

或者正如Jonathan Grynspan指出的那样,这会更好:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
int years = [[gregorian components:NSYearCalendarUnit fromDate:birthDate toDate:[NSDate date] options:0] year];
[gregorian release];
Run Code Online (Sandbox Code Playgroud)

而现在使用ARC它可以(过于)简短:

int years = [[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] components:NSYearCalendarUnit fromDate:birthDate toDate:[NSDate date] options:0] year];
Run Code Online (Sandbox Code Playgroud)

  • 小心 - "currentCalendar"不保证是格里高利/太阳能.在很多国家都是月球.您需要专门使用公历来计算年龄. (3认同)