2012-04-10 3 views
0

У меня проблема с моей функцией, которая должна получить дату недели на этой неделе.NSDate off при вычислении даты последнего понедельника

Иногда это выходной день:

+(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

, чтобы начать с 0 по понедельникам, а не по воскресеньям – Ayrad

ответ

2

Яблоко code demonstrating how to do almost exactly this. Они нацелены на воскресенье недели, а не на понедельник, но вы можете просто добавить 1 в нужное место для настройки.

Вы определенно не хотите делать что-то вроде 60*60*24 и вычислить секунды, чтобы настроить их. Например, дни могут иметь более или менее 24 часов из-за изменений в летнее время.

Смежные вопросы