【问题标题】:How to calculate the age in ios? [duplicate]ios如何计算年龄? [复制]
【发布时间】:2015-01-02 17:00:09
【问题描述】:

我想以 X 年 Y 月 Z 天的形式计算年龄。这是我的代码

 NSString *dateString = @"15-Sep-1997";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MMM-yyyy"];

NSDate *PrevDate = [dateFormatter dateFromString:dateString];


NSDate *today = [NSDate date];
NSLog(@"Prev date = %@", PrevDate);
NSLog(@"today =%@", today);
NSInteger  years;
NSInteger months;
NSInteger days;

NSCalendar *calendar = [NSCalendar currentCalendar];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *dateComponentsNow = [calendar components:unitFlags fromDate:today];
NSDateComponents *dateComponentsBirth = [calendar components:unitFlags fromDate:PrevDate];

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];
    months = [dateComponentsNow month] - [dateComponentsBirth month];
    days = [dateComponentsNow day] - [dateComponentsBirth day];
}


NSLog(@"%d years %d months %d days", years, months, days);

输出:17 年 2 个月 -9 天(需要多 1 个月并减去天数) 正确输出:17 年 1 个月 22 天(截至今天)

【问题讨论】:

标签: ios xcode nsdate nsdatecomponents


【解决方案1】:

检查下面的代码。

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MMM-yyyy"];
NSDate *startD = [dateFormatter dateFromString:@"15-Sep-1997"];
NSDate *endD = [NSDate date];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond;
NSDateComponents *components = [calendar components:unitFlags fromDate:startD toDate:endD options:0];

NSInteger year  = [components year];
NSInteger month  = [components month];
NSInteger day  = [components day];

NSLog(@"%ld:%ld:%ld", (long)year, (long)month,(long)day);

输出是

17:1:22

也许这会对你有所帮助。

【讨论】:

  • 工作得很好,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
相关资源
最近更新 更多