在计算最后一个星期一的日期时关闭NSDate

时间:2012-04-10 15:17:34

标签: objective-c 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];
}

1 个答案:

答案 0 :(得分:2)

Apple有code demonstrating how to do almost exactly this。它们定位的是星期日而不是星期一,但您可以在适当的位置添加1进行调整。

你绝对不希望做60*60*24之类的事情和计算秒数来调整。例如,由于夏令时的变化,天数可能多于或少于24小时。