2012-04-10 101 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

爲什麼'工作日== 1'?星期日爲1,星期一爲2. – trojanfoe 2012-04-10 15:33:47

+0

星期一爲0開始而非星期日爲1 – Ayrad 2012-04-10 15:55:24

回答

2

蘋果code demonstrating how to do almost exactly this。他們的目標是星期日而不是星期一,但您可以在適當的地方加1來調整。

你絕對不想做像60*60*24這樣的事情,並計算秒數來調整。例如,由於夏令時更改,日期可能多於或少於24小時。

相關問題