2013-03-09 4 views
1

Я использую этот метод, чтобы получить текущую неделю первой и последние дни:Получить первый день и последний день недели

NSDate *weekDate = [NSDate date]; 
NSCalendar *myCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 

NSDateComponents *currentComps = [myCalendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekOfYearCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:weekDate]; 
int ff = currentComps.weekOfYear; 
NSLog(@"1 %d", ff); 

[currentComps setWeekday:1]; // 1: sunday 
NSDate *firstDayOfTheWeek = [myCalendar dateFromComponents:currentComps]; 
[currentComps setWeekday:7]; // 7: saturday 
NSDate *lastDayOfTheWeek = [myCalendar dateFromComponents:currentComps]; 

NSDateFormatter *myDateFormatter = [[NSDateFormatter alloc] init]; 
myDateFormatter.dateFormat = @"dd/MM/yyyy"; 
NSString *firstStr = [myDateFormatter stringFromDate:firstDayOfTheWeek]; 
NSString *secondStr = [myDateFormatter stringFromDate:lastDayOfTheWeek]; 

NSLog(@"first - %@ \nlast - %@", firstStr, secondStr); 

И я хочу знать, что я должен изменить в этом, чтобы получить следующие неделю первый и последний день и две недели с этого времени?

+0

Сторона примечания - не каждое местонахождение начинает свою неделю в воскресенье. Многие страны начинают неделю в понедельник. Вы должны использовать 'NSCalendar firstWeekday', чтобы получить правильный первый день недели. – rmaddy

+0

Как мне это сделать? где мне нужно изменить свой код? – MTA

ответ

4

Чтобы получить следующую неделю, добавьте 7 дней до firstDayOfTheWeek, а затем lastDayOfTheWeek.

NSDateComponents *comps = [[NSDateComponents alloc] init]; 
[comps setDay:7]; 
NSDate *firstDayOfNextWeek = [myCalendar dateByAddingComponents:comps toDate:firstDayOfTheWeek options:0]; 

Этот код предполагает 7-дневную неделю. В идеале вы бы заменили это предположение кодом, который получает фактическую длину недели.

Боковое примечание: Ваш код предполагает, что неделя начнется в воскресенье. Многие локали начинают свою неделю в другие дни, такие как понедельник. Изменение:

[currentComps setWeekday:1]; 

к:

[currentComps setWeekday:[myCalendar firstWeekday]]; 

Я бы тогда изменить расчет lastDayOfTheWeek просто добавить 6 дней в firstDayOfWeek.

+0

Мне нужно было изменить NSDateComponents тем, что вы даете? – MTA

+0

Компоненты даты, которые я показываю, предназначены для расчета следующей недели. Те, которые у вас есть, предназначены для расчета первой даты, в которой вы нуждаетесь. Не меняйте их. – rmaddy

-1

Используйте код ниже, который возвращает индекс текущих текущих недельных дней. Например, если сегодня это суббота, то это означает, что 7 означает последний день недели.

-(int)currentdayweeklynumber{ 

NSDate *CurrentDate = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"];// you can use your format. 

//Week Start Date 
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:CurrentDate]; 
int dayofweek = [[[NSCalendar currentCalendar] components:NSWeekdayCalendarUnit fromDate:CurrentDate] weekday]; 
NSLog(@" dayofweek=%d",dayofweek); 
return dayofweek; 

}

Используя этот номер, добавить или вычесть, чтобы получить первый или последний недели. Вы также можете использовать эту дату начала и окончания на следующей неделе только простым подсчетом.

+0

Ответы на неправильный вопрос. – rmaddy

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