如何在ios sdk中获取当月所有星期一的所有日期?
例如我希望所有星期一的日期都在 2015 年 1 月
下面的代码从 nsdate 给我月、日和年。但是现在我想要那个月的工作日(星期一)的 nsdate。
NSDate *currentDate = [NSDate date];
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate]; // Get necessary date components
[components month]; //gives you month
[components day]; //gives you day
[components year]; // gives you year
最佳答案
//Set Wantedday here with sun=1 ..... sat=7;
NSInteger wantedWeekDay = 2; //for monday
//set current date here
NSDate *currentDate = [NSDate date];
//get calender
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
// Start out by getting just the year, month and day components of the current date.
NSDateComponents *components = [gregorianCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSCalendarUnitWeekday fromDate:currentDate];
// Change the Day component to 1 (for the first day of the month), and zero out the time components.
[components setDay:1];
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
//get first day of current month
NSDate *firstDateOfCurMonth = [gregorianCalendar dateFromComponents:components];
//create new component to get weekday of first date
NSDateComponents *newcomponents = [gregorianCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSCalendarUnitWeekday fromDate:firstDateOfCurMonth];
NSInteger firstDateWeekDay = newcomponents.weekday;
NSLog(@"weekday : %li",(long)firstDateWeekDay);
//get last month date
NSInteger curMonth = newcomponents.month;
[newcomponents setMonth:curMonth+1];
NSDate * templastDateOfCurMonth = [[gregorianCalendar dateFromComponents:newcomponents] dateByAddingTimeInterval: -1]; // One second before the start of next month
NSDateComponents *lastcomponents = [gregorianCalendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSCalendarUnitWeekday fromDate:templastDateOfCurMonth];
[lastcomponents setHour:0];
[lastcomponents setMinute:0];
[lastcomponents setSecond:0];
NSDate *lastDateOfCurMonth = [gregorianCalendar dateFromComponents:lastcomponents];
NSLog(@"%@",lastDateOfCurMonth);
NSMutableArray *mutArrDates = [NSMutableArray array];
NSDateComponents *dayDifference = [NSDateComponents new];
[dayDifference setCalendar:gregorianCalendar];
//get wanted weekday date
NSDate *firstWeekDateOfCurMonth = nil;
if (wantedWeekDay == firstDateWeekDay) {
firstWeekDateOfCurMonth = firstDateOfCurMonth;
}
else
{
NSInteger day = wantedWeekDay - firstDateWeekDay;
if (day < 0)
day += 7;
++day;
[components setDay:day];
firstWeekDateOfCurMonth = [gregorianCalendar dateFromComponents:components];
}
NSLog(@"%@",firstWeekDateOfCurMonth);
NSUInteger weekOffset = 0;
NSDate *nextDate = firstWeekDateOfCurMonth;
do {
[mutArrDates addObject:nextDate];
[dayDifference setWeekOfYear:++weekOffset];
NSDate *date = [gregorianCalendar dateByAddingComponents:dayDifference toDate:firstWeekDateOfCurMonth options:0];
nextDate = date;
} while([nextDate compare:lastDateOfCurMonth] == NSOrderedAscending || [nextDate compare:lastDateOfCurMonth] == NSOrderedSame);
NSLog(@"%@",mutArrDates);
关于ios - 在ios sdk中获取当月星期一的所有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882242/