2012-04-10 17 views
0

今週の月曜日の日付を取得する関数に問題があります。最後の月曜日の日付を計算中にNSDateをオフにする

時にはそれが一日オフだ:

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

なぜ 'weekday == 1'ですか?日曜日は1、月曜は2です。 – trojanfoe

+0

日曜日は1日ではなく月曜日に0で開始します – Ayrad

答えて

2

Appleがcode demonstrating how to do almost exactly thisを持っています。月曜の代わりに週の日曜日をターゲットにしていますが、適切な場所に1を加えて調整することができます。

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

関連する問題