-1

現在、次の金曜日に日をインクリメントする以下のコードがありますが、現在の週の金曜日を取得する必要があります。たとえば、先週の日曜日、03/01 の場合。私の回答は金曜日(03/06)ではなく、先週の金曜日(02/28)になると思います。

他の回答を確認しましたが、これを達成するためのクリーンな方法を実装する方法に混乱しています。

+ (NSDate *)getLastFridayYearsMonthStartingDate:(NSDate *)date {

NSDateComponents *dateComponents = [[NSCalendar gregorianCalendar] components:NSYearCalendarUnit|NSCalendarUnitDay|NSCalendarUnitMonth|NSWeekdayCalendarUnit
                                                                     fromDate:date];

     // Set date to last year, +1 to account for previous business day
     [dateComponents setYear: -1];
     [dateComponents setDay:[dateComponents day]+1];


    // We always want the start date to be the friday of the given week, so we will increment the difference if not
    if ([dateComponents weekday] != 6) {
        NSInteger daysToFriday = (13 - [dateComponents weekday]) % 7;
        [dateComponents setDay:[dateComponents day]+daysToFriday];
    }

    NSDate *fridayDate = [[NSCalendar gregorianCalendar] dateFromComponents:dateComponents];

    return fridayDate;
}
4

1 に答える 1

0

setWeekday を使用して特定の日を設定してみてください

-(NSDate *) getFriday:(NSDate *)date {
    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [cal setTimeZone:[NSTimeZone systemTimeZone]];

    NSDateComponents *comp = [cal components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:date];


    [comp setWeekday:6];
    [comp setHour:0];
    [comp setMinute:0];
    [comp setSecond:0];
    return [cal dateFromComponents:comp];
}
于 2015-03-04T19:52:26.600 に答える