0

今週の月曜日の日付を取得するはずの関数に問題があります。

たまにお休みです:

+(NSDate *) lastMondayBeforeDate:(NSDate*)timeStamp {
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *comps = 
    [gregorian components:NSWeekdayCalendarUnit fromDate:timeStamp];
    NSInteger weekday = [comps weekday];
    weekday = weekday==1 ? 6 : weekday-2; 
    NSTimeInterval secondsSinceMondayMidnight =  
    (NSUInteger) [timeStamp timeIntervalSince1970] % 60*60*24 + 
    weekday * 60*60*24;

    NSLog(@"MONDAY's DATE-----------%@", [timeStamp dateByAddingTimeInterval:-secondsSinceMondayMidnight]);
    return [timeStamp dateByAddingTimeInterval:-secondsSinceMondayMidnight];
}
4

1 に答える 1

2

Appleには、これをほぼ正確に行う方法を示すコードがあります。月曜日ではなく日曜日を対象としていますが、適切な場所に1を追加するだけで調整できます。

60*60*24あなたは間違いなく、調整する秒数のようなことをしたくありません。たとえば、夏時間の変更により、日数が24時間より長くなることも短くなることもあります。

于 2012-04-11T06:29:32.333 に答える