0

ユーザーが数週間の間スクロールできるカレンダーを作成する必要があります。週の最初と最後の曜日は、(例)「6 月 4 日 - 6 月 10 日」のように表示されます。

今、私は最初から と が必要NSDateであることを知っていました。NSCalendar実際、今週の最初と最後の日を取得することができましたが、非常に面倒に見えます。今後数週間および過去数週間の日付を取得します。これは、現在の週の最初と最後の日のdayandを与える私のコードです: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]);
4

1 に答える 1

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日をこれで実行して、次の日などを取得します。

土曜日と日曜日のチェックが不要な場合は削除するために、マイナーな変更が必要になる場合があります。

お役に立てれば !

于 2012-06-08T12:00:07.927 に答える