在ios SDK中获取当月星期一的所有日期 [英] Get all the date of the monday of current month in ios sdk

查看:81
本文介绍了在ios SDK中获取当月星期一的所有日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在ios sdk中获取当月所有星期一的所有日期?

How to get all the date of all the monday in current month in ios sdk?

例如,我希望所有星期一的日期都在2015年1月

For example i want date of all the monday occur in January-2015

下面的代码从nsdate给我月份,日期和年份.但是现在我想要该月的工作日(星期一)的日期.

Below code give me month,day and year from nsdate. But now i want nsdate of weekday(Monday) in that month.

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 SDK中获取当月星期一的所有日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆