2

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

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

- (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];
}
4

1 回答 1

19

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

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

如果没有要求足够小的单位来保持差异的完整精度,则结果是有损的。一些操作可能是不明确的,并且计算的行为是特定于日历的,但通常较大的组件将在较小的组件之前计算;例如,在公历中,结果可能是 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];
于 2012-07-25T17:54:08.357 回答