2012-06-08 57 views
0

我需要製作一個用戶可以在幾個星期之間滾動的日曆。本週的第一天和最後一天將顯示爲(例如)「6月4日 - 6月10日」。獲得幾周的第一天和最後一天

現在我從一開始就知道我需要NSDateNSCalendar,實際上我設法得到了第一週的第一天和最後一天,但它看起來非常麻煩,我確信需要更輕鬆方法,因爲我需要得到幾個未來和過去幾個星期的日期。 這是我的代碼,使day和本週的第一天和最後一天的month

NSDate *today = [NSDate date]; 
    NSCalendar* cal = [NSCalendar currentCalendar]; 
    NSDateComponents* comp = [cal components:(NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSYearCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit) fromDate:[NSDate date]]; 

    NSDate *beginOfWeek = [today dateByAddingTimeInterval: -1*([comp weekday]-2)*24*3600]; 
    NSDate *endOfWeek = [today dateByAddingTimeInterval:(7-[comp weekday]+2)*24*3600]; 

    NSLog(@"beginWeekDay=%d\n",[[cal components:(NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit) fromDate: beginOfWeek] day]); 
    NSLog(@"endWeekDay=%d\n",[[cal components:(NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit) fromDate: endOfWeek] day]); 
    NSLog(@"beginWeekmonth=%d\n",[[cal components:(NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit) fromDate: beginOfWeek] month]); 
    NSLog(@"endWeekmonth=%d\n",[[cal components:(NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit) fromDate: endOfWeek] month]); 

回答

1

我發現了這一點,這可能會對你有所幫助:http://www.cocoanetics.com/2009/11/add-one-week-skip-weekend/

- (NSDate *)addWeekToDateAndSkipWeekend:(NSDate *)now { 
int daysToAdd = 6; // we'll add the 7th later 

// set up date components 
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; 
[components setDay:daysToAdd]; 

// create a calendar 
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 

NSDate *newDate = [gregorian dateByAddingComponents:components toDate:now options:0]; 

[components setDay:1]; // reuse to skip single days 
NSDateComponents *newDateComps; // new componets to get weekday 

// do always executed once, so we add the 7th day here 
do 
{ 
    // add one day 
    newDate = [gregorian dateByAddingComponents:components toDate:newDate options:0]; 
    newDateComps = [gregorian components:NSWeekdayCalendarUnit fromDate:newDate]; 

    // repeat if the date is Saturday (7) or Sunday (1) 
    NSLog(@"weekday: %d", [newDateComps weekday]); 
} while (([newDateComps weekday]==7)||([newDateComps weekday]==1)); 

return newDate; 
} 

從理論上講,你在[NSDate date]的for循環中運行這個循環,你會得到返回的日期7th,然後你將運行返回的7th這一天,並獲得下一個..等等..

如果您不需要,可能需要稍作更改,以取消週六+週日的支票。

希望這會有所幫助!

相關問題