3

こんばんは、

日付範囲を比較して、日付範囲間の日数を数える方法を見つけようとしています。たとえば、次の 3 つの範囲が指定されています。

range_1 01/01/2001 to 01/01/2002
range_2 01/02/2002 to 01/01/2003
range_3 01/02/2003 to 01/01/2004

my_date_range 12/12/2001 から 01/05/2002 までを上記の範囲と比較すると、range_1 と my_date_range の間は 19 日、range_2 と my_date_range の間は 5 日、range_3 と my_date_range の間は0 日。

Excel では、これは簡単でした。

=SUMPRODUCT(ISNUMBER(MATCH(ROW(INDIRECT(A1&":"&B1)),ROW(INDIRECT($C$1&":"&$D$1)),0))*1)

ここで、A1 と B1 はユーザーが入力する開始日と終了日で、C1 と D1 は 3 つの日付範囲の 1 つです。次に、同じ数式を使用して、A1 と B1 を 2 番目の日付範囲と比較し、次に 3 番目の日付範囲と比較します。

しかし、これはどのようにobjective-cに変換されるのでしょうか? (2 つの日付を比較して、それらの間の日数を取得できます。)

4

2 に答える 2

8

まず、日付文字列をNSDate値に変換する必要があります。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM/dd/yyyy"];

NSDate *range1Start = [dateFormatter dateFromString:@"01/01/2001"];
NSDate *range1End   = [dateFormatter dateFromString:@"01/01/2002"];

NSDate *userStart   = [dateFormatter dateFromString:@"12/12/2001"];
NSDate *userEnd     = [dateFormatter dateFromString:@"01/05/2002"];

次に、重複間隔を計算できます。

NSDate *overlapFrom = [range1Start laterDate:userStart];
NSDate *overlapTo   = [range1End earlierDate:userEnd];

最後に、重複する間隔の開始日と終了日の間の日数:

NSInteger days;
if ([overlapFrom compare:overlapTo] > 0) {
    // Date ranges do not overlap
    days = 0;
} else {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *comp = [calendar components:NSDayCalendarUnit fromDate:overlapFrom toDate:overlapTo options:0];
    days = [comp day];
}
NSLog(@"%ld", (long)days);

この例では、12/12/200120と 01/01/2002 の差が 20 日であるため、出力は になります。1重複範囲の開始日と終了日の両方をカウントする必要がある場合は、追加する必要があります。

于 2013-02-03T11:00:38.837 に答える