如何根据NSDate计算年龄

Lin*_*rld 50 date nsdate foundation ios

如何根据出生日期计算年龄,格式为6/24/1976周一/日期/年...

cob*_*bal 258

其中许多答案都没有恰当地说明闰年,最好是使用Apple的方法而不是除以常数.

迅速

let birthday: NSDate = ...
let now = Date()
let ageComponents = calendar.dateComponents([.year], from: birthday, to: now)
let age = ageComponents.year
Run Code Online (Sandbox Code Playgroud)

Objective-C的

NSDate* birthday = ...;

NSDate* now = [NSDate date];
NSDateComponents* ageComponents = [[NSCalendar currentCalendar] 
                                   components:NSCalendarUnitYear 
                                   fromDate:birthday
                                   toDate:now
                                   options:0];
NSInteger age = [ageComponents year];
Run Code Online (Sandbox Code Playgroud)

我认为这比其他任何答案都更清晰,更准确.

  • 哇 !很好的答案!这值得一个自我面对手掌:D! (2认同)
  • 这帮助我把年龄变成了int.在我的情况下,我还必须在使用之前从字符串转换日期:NSDateFormatter*dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MM/dd/yyyy"]; NSDate*birthday = [dateFormat dateFromString:@"11/19/1986"]; (2认同)

Fab*_*oni 10

以下是根据您的出生日期(以年和日)计算实际年龄的方法:

NSString *birthDate = @"03/31/1990";    
NSDate *todayDate = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];
int time = [todayDate timeIntervalSinceDate:[dateFormatter dateFromString:birthDate]];
int allDays = (((time/60)/60)/24);
int days = allDays%365;
int years = (allDays-days)/365;

NSLog(@"You live since %i years and %i days",years,days);
Run Code Online (Sandbox Code Playgroud)

它返回年份和确切的天数.如果需要,您可以更改NSDateFormatter等等.

  • 你住的地方没有闰年吗?;) (3认同)

Dil*_*mar 6

这是我从这个链接获得的代码..它的效果很好..输出将像"5年6个月",所有用例都包含在其中.

- (NSString *)age:(NSDate *)dateOfBirth {
   NSInteger years;
   NSInteger months;
   NSInteger days;

   NSCalendar *calendar = [NSCalendar currentCalendar];
    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;

   NSDateComponents *dateComponentsNow = [calendar components:unitFlags fromDate:[NSDate date]];
   NSDateComponents *dateComponentsBirth = [calendar components:unitFlags fromDate:dateOfBirth];

   if (([dateComponentsNow month] < [dateComponentsBirth month]) ||

(([dateComponentsNow month] == [dateComponentsBirth month]) && ([dateComponentsNow day] < [dateComponentsBirth day]))) {
   years = [dateComponentsNow year] - [dateComponentsBirth year] - 1;
} else {
   years = [dateComponentsNow year] - [dateComponentsBirth year];
}

if ([dateComponentsNow year] == [dateComponentsBirth year]) {
   months = [dateComponentsNow month] - [dateComponentsBirth month];
} else if ([dateComponentsNow year] > [dateComponentsBirth year] && [dateComponentsNow month] > [dateComponentsBirth month]) {
   months = [dateComponentsNow month] - [dateComponentsBirth month];
} else if ([dateComponentsNow year] > [dateComponentsBirth year] && [dateComponentsNow month] < [dateComponentsBirth month]) {
   months = [dateComponentsNow month] - [dateComponentsBirth month] + 12;
} else {
   months = [dateComponentsNow month] - [dateComponentsBirth month];
}

if ([dateComponentsNow year] == [dateComponentsBirth year] && [dateComponentsNow month] == [dateComponentsBirth month]) {
   days = [dateComponentsNow day] - [dateComponentsBirth day];
}

if (years == 0 && months == 0) {
   if (days == 1) {
      return [NSString stringWithFormat:@"%d day", days];
   } else {
      return [NSString stringWithFormat:@"%d days", days];
   }
} else if (years == 0) {
   if (months == 1) {
      return [NSString stringWithFormat:@"%d month", months];
   } else {
      return [NSString stringWithFormat:@"%d months", months];
   }
} else if ((years != 0) && (months == 0)) {
   if (years == 1) {
       return [NSString stringWithFormat:@"%d year", years];
   } else {
       return [NSString stringWithFormat:@"%d years", years];
   }
} else {
  if ((years == 1) && (months == 1)) {
      return [NSString stringWithFormat:@"%d year and %d month", years, months];
  } else if (years == 1) {
      return [NSString stringWithFormat:@"%d year and %d months", years, months];
  } else if (months == 1) {
      return [NSString stringWithFormat:@"%d years and %d month", years, months];
  } else {
      return [NSString stringWithFormat:@"%d years and %d months", years, months];
  }
}
}
Run Code Online (Sandbox Code Playgroud)

如果你想年龄为int尝试以下答案..我从以下链接获得

- (NSInteger)age:(NSDate *)dateOfBirth {
  NSCalendar *calendar = [NSCalendar currentCalendar];
  unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
  NSDateComponents *dateComponentsNow = [calendar components:unitFlags fromDate:[NSDate date]];
  NSDateComponents *dateComponentsBirth = [calendar components:unitFlags fromDate:dateOfBirth];

  if (([dateComponentsNow month] < [dateComponentsBirth month]) ||
      (([dateComponentsNow month] == [dateComponentsBirth month]) && ([dateComponentsNow day] < [dateComponentsBirth day]))) {
    return [dateComponentsNow year] - [dateComponentsBirth year] - 1;
  } else {
    return [dateComponentsNow year] - [dateComponentsBirth year];
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于一些..