NSDate月差异

时间:2013-06-10 09:37:06

标签: ios nsdate

我正面临一个问题。我从用户那里获取开始日期和结束日期。我在UI中展示了那几个月。

第一个问题:如果用户提供同一个月的不同日期(例如2013-01-10和2013-01-25),我会尝试获取两个日期的差异时间,月差异显示我零月。如何获得月份差异,包括开始日期月份和结束日期月份?

第二个问题:如果用户提供了不同的日期,例如2013-01-29和2013-02-01,它仍然会给我零月差异。我怎样才能克服这两个问题呢?在这两种情况下,我都得到了相同的结果。我该如何区分?

感谢。

2 个答案:

答案 0 :(得分:4)

你可以尝试一下

NSString *fromDateString = @"2013-01-10";
NSString *toDateString = @"2013-01-25";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];

NSDate * fromDate = [formatter dateFromString:fromDateString];
NSDate *toDate      = [formatter dateFromString:toDateString];

NSCalendar *calender = [NSCalendar currentCalendar];

NSUInteger units = (NSMonthCalendarUnit|NSDayCalendarUnit);
NSDateComponents *dateComponents = [calender components:units fromDate:fromDate toDate:toDate options:0];

NSString *duration = nil;
if (dateComponents.month) {
     //Different months
    duration = [NSString stringWithFormat:@"%d months",dateComponents.month];
}else{
    //Same month
    duration = [NSString stringWithFormat:@"%d days",dateComponents.day];
}

NSLog(@"Duration : %@",duration);

答案 1 :(得分:0)

您可以在Github上查看这个项目:

MTDates NSDate categories

即使您无法使用整个库,也可以查看实现它的代码。有一种方法应该是你需要的:

- (NSInteger)mt_monthsSinceDate:(NSDate *)date;