两个NSDates之间的月数和天数

我想计算两个NSDates之间的月数和天数。 我有正确计算的天数,但如何将其转换为月份和剩余天数?

这就是我用来计算总天数的方法,它正常工作。

- (NSInteger) numberOfDaysUntil { NSDate *fromDate; NSDate *toDate; NSCalendar *calendar = [NSCalendar currentCalendar]; [calendar rangeOfUnit:NSDayCalendarUnit startDate:&fromDate interval:NULL forDate:[self dateOnly:[NSDate date]]]; [calendar rangeOfUnit:NSDayCalendarUnit startDate:&toDate interval:NULL forDate:[self dateOnly:self]]; NSDateComponents *difference = [calendar components:NSDayCalendarUnit fromDate:fromDate toDate:toDate options:0]; return [difference day]; } 

正如Hot Licks所说,在大多数日历中,您无法将天数转换为数月/天。

但是, NSCalendar方法components:fromDate:toDate:options:如果您同意Apple的实现,则可以执行此计算。 从文档:

如果没有足够小的单位要求保持差异的全部精度,则结果是有损的。 某些操作可能不明确,并且计算的行为是特定于日历的,但通常在较小的组件之前计算较大的组件; 例如,在公历中,结果可能是1个月和5天,而不是例如0个月和35天。

文档中的讨论甚至包括确切问题的示例代码:

 NSDate *startDate = ...; NSDate *endDate = ...; unsigned int unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; NSDateComponents *comps = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0]; int months = [comps month]; int days = [comps day];