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



我的类代表一个人有一个计算这个人的年龄的方法:

@interface Student : NSObject
@property (strong) NSDate *dob;
// This method will work out the person's age in calendar years
- (NSDateComponents*)ageCalculation:(NSDate*)dob;

这是类实现文件

@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

不过,我不确定我做得是否正确:

Student *student1 = [[Student alloc] init];
[student1 setDob:aDateOfBirth];
NSDateComponents *ageComponents = [student1 ageCalculation:aDateOfBirth];

我应该如何处理此方法的结果?如何使ageCalculation:使用我已经设置的日期?

有几件事需要注意。首先,计算年龄的代码很好,除了我不明白为什么你返回NSDateComponents而不仅仅是以年为单位的年龄。

这是我会怎么做的

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

您只对year组件感兴趣,因此请返回它而不是NSDateComponents。使用self.dob而不是参数来获取您之前设置的日期。

这是经过测试的解决方案,经过很长时间,我有机会使用Objective C并尝试从出生日期开始查找年龄,然后我写了这个解决方案,希望这对某人有所帮助

 Call this Function as : [self getAge:datePicker.date]
- (NSString *)getAge:(NSDate *)dateOfBirth {
    NSInteger years;
    NSInteger months;
    NSInteger days;
    NSCalendar *calendar = [NSCalendar currentCalendar];
    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents *dateComponent = [calendar components:unitFlags fromDate:dateOfBirth toDate:[NSDate date] options:0];
    years = [dateComponent year];
    months = [dateComponent month];
    days = [dateComponent day];
    NSString *ageStr = [[NSString alloc]init];
    if (years > 0) {
        if (years > 1) {
            ageStr = [NSString stringWithFormat:@"%ld years",years];
        }
        else {
            ageStr = [NSString stringWithFormat:@"%ld year",years];
        }
    }
    if (months > 0) {
        if (months > 1) {
            if(![ageStr isEqualToString:@""]) {
                ageStr = [NSString stringWithFormat:@"%@ %ld months",ageStr,months];
            }
            else {
                ageStr = [NSString stringWithFormat:@"%ld months",months];
            }
        }
        else {
            if(![ageStr isEqualToString:@""]) {
                ageStr = [NSString stringWithFormat:@"%@ %ld month",ageStr,months];
            }
            else {
                ageStr = [NSString stringWithFormat:@"%ld month",months];
            }
        }
    }
    if (days > 0) {
        if (days > 1) {
            if(![ageStr isEqualToString:@""]) {
                ageStr = [NSString stringWithFormat:@"%@ %ld days",ageStr,days];
            }
            else {
                ageStr = [NSString stringWithFormat:@"%ld days",days];
            }
        }
        else {
            if(![ageStr isEqualToString:@""]) {
                ageStr = [NSString stringWithFormat:@"%@ %ld day",ageStr,days];
            }
            else {
                ageStr = [NSString stringWithFormat:@"%ld day",days];
            }
        }
    }
    return ageStr;
}

刚刚创建了一个简单的方法,该方法以字符串形式返回以年为单位的年龄。

-(NSString *) getAge:(NSDate *)dateOfBirth {
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierIndian];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit
                                               fromDate:dateOfBirth
                                                 toDate:[NSDate date]
                                                options:0];
    return [NSString stringWithFormat:@"%li",components.year];
    }

注意

  1. 这使用印度日历 - 如果您愿意,可以更改它。
  2. 调用NSString *yearsOldinString = [self getAge:dateOfBirth];,其中出生日期以 NSDate 格式表示人的出生日期。

最新更新