2

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:ドキュメントから:

差の完全な精度を保持するために要求された十分に小さいユニットがない場合、結果は損失になります。一部の操作はあいまいになる可能性があり、計算の動作はカレンダー固有ですが、通常、大きなコンポーネントは小さなコンポーネントの前に計算されます。たとえば、グレゴリオ暦では、結果は、たとえば0か月と35日ではなく、1か月と5日になります。

ドキュメントの説明には、問題のサンプルコードも含まれています。

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 に答える