使用两个NSDates计算一个人的年龄

jon*_*jon 1 time cocoa objective-c nsdate

我代表一个人的班级有一种计算该人年龄的方法:

@interface Student : NSObject

@property (strong) NSDate *dob;

// This method will work out the person's age in calendar years
- (NSDateComponents*)ageCalculation:(NSDate*)dob;
Run Code Online (Sandbox Code Playgroud)

这是类实现文件

@implementation Student

- (NSDateComponents*)ageCalculation:(NSDate*)dob {
    NSDate *now = [NSDate date];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit units = NSYearCalendarUnit | NSMonthCalendarUnit;
    NSDateComponents *components = [calendar components:units 
                                               fromDate:dob 
                                                 toDate:now   
                                                options:0];
    return components;
}

@end
Run Code Online (Sandbox Code Playgroud)

我不确定我是否正确行事,但是:

Student *student1 = [[Student alloc] init];
[student1 setDob:aDateOfBirth];
NSDateComponents *ageComponents = [student1 ageCalculation:aDateOfBirth];
Run Code Online (Sandbox Code Playgroud)

我应该怎么做这个方法的结果?我怎样才能ageCalculation:使用我已设定的日期?

Gab*_*lla 5

有几件事可以注意到.首先,计算年龄的代码很好,除了我不明白为什么你回来NSDateComponents而不仅仅是年龄.

我就是这样做的

- (NSInteger)age {
    NSDate *today = [NSDate date];
    NSDateComponents *ageComponents = [[NSCalendar currentCalendar]
                                       components:NSYearCalendarUnit
                                       fromDate:self.dob
                                       toDate:today
                                       options:0];
    return ageComponents.year;
}
Run Code Online (Sandbox Code Playgroud)

您只对year组件感兴趣,所以请将其返回而不是NSDateComponents.使用self.dob而不是参数获取您之前设置的日期.