2013-09-17 5 views
4

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

+2

Ваш вопрос непонятен. Вы хотите получить будний день на 1-е число каждого месяца? 1 сентября 2013 года - воскресенье, 1 октября 2013 года - вторник и т. Д. – rmaddy

+0

@rmaddy yes Я имею в виду, что – Anton

+0

@Wain Я попытался сыграть с компонентами даты, порядком дня недели, будними днями и т. Д. – Anton

ответ

8

В первый, получить первый день текущего месяца (например):

NSDate *today = [NSDate date]; 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSDateComponents *components = [gregorian components:(NSEraCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit) fromDate:today]; 
components.day = 1; 
NSDate *firstDayOfMonth = [gregorian dateFromComponents:components]; 

Затем используйте NSDateFormatter для печати как в будний день:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEEE"]; 
NSLog(@"%@", [dateFormatter stringFromDate:firstDayOfMonth]); 

P.S. также см. Date Format Patterns

1

В зависимости от результата вы можете использовать NSDateFormatter (как уже было сказано), или вы можете использовать класс NSDateComponents. NSDateFormatter даст вам строковое представление, NSDateComponents даст вам целочисленные значения. Метод weekday может делать то, что вы хотите.

NSDateComponents *components = ...; 
NSInteger val = [components weekday]; 
3

Вот решение, чтобы получить имя дня недели первого дня в текущем месяце

NSDateComponents *weekdayComps = [[NSDateComponents alloc] init]; 
weekdayComps = [calendar.currentCalendar components:calendar.unitFlags fromDate:calendar.today]; 
weekdayComps.day = 1; 
NSDateFormatter *weekDayFormatter = [[NSDateFormatter alloc]init]; 
[weekDayFormatter setDateFormat:@"EEEE"]; 
NSString *firstweekday = [weekDayFormatter stringFromDate:[calendar.currentCalendar dateFromComponents:weekdayComps]]; 
NSLog(@"FIRST WEEKDAY: %@", firstweekday); 

Для индекса буднего дня, используйте этот

NSDate *weekDate = [calendar.currentCalendar dateFromComponents:weekdayComps]; 
NSDateComponents *components = [calendar.currentCalendar components: NSWeekdayCalendarUnit fromDate: weekDate]; 
NSUInteger weekdayIndex = [components weekday]; 
NSLog(@"WEEKDAY INDEX %i", weekdayIndex); 

Вы также можете увеличить или при необходимости уменьшите месяц.

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