如何计算两个日期之间的所有星期一日期

时间:2015-12-28 13:56:01

标签: ios objective-c date

在coredata中有两个不同的实体,其中包括&Class; 39< ClassDetails'和' ClassSlots'需要来自ClassSlots'的所有班级老虎机日期实体。在ClassSlots'中有多个Class Slots。在“课程详细信息”中包含课程开始日期和结束日期的实体实体。场景就像是在课堂添加时添加时间只有星期日 - 星期一 - 星期二..格式。现在,在提取时,如何在特定类的开始日期和结束日期之间获取那些日期(以日期格式)。

使用这段代码但没有得到预期的结果(dayId就像这样 - 星期日为0,星期一为1)

NSLog(@"Start date ==>%@ End date ==>%@ dayId ==>%@",startDate,endDate,dayId);

    NSDateFormatter *dateFormator = [[NSDateFormatter alloc] init];
    [dateFormator setDateFormat:@"yyyy-MM-dd"];

    NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[dateFormator dateFromString:startDate]];

    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setWeekOfYear:[components weekOfYear] + 1];
    [comps setWeekday:[components day]];
    [comps setYear:[components year]];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setFirstWeekday:[dayId intValue]+1];
    NSDate *date = [calendar dateFromComponents:comps];

    NSLog(@"date ==> %@",date);

1 个答案:

答案 0 :(得分:0)

在您的情况下,您要检查从头到尾整整一个月 - 所以您可以使用rangeOfUnit NSCalendar的API。

NSDate *aDate; // make this any date in the desired month
NSInteger numberOfDaysInMonth = [[NSCalendar currentCalendar]
    rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth
    forDate:aDate].length;

如果你知道那个月的第一天的工作日是什么,你可以自己完成其余的逻辑。

NSCalendarUnit units = NSCalendarUnitDay | NSCalendarUnitMonth;
NSDateComponents *comps = [[NSCalendar currentCalendar]
    components:units fromDate:aDate];
comps.day = 1;
NSDate *firstDayInMonth = [[NSCalendar currentCalendar] dateFromComponents:comps];
comps = [[NSCalendar currentCalendar] 
    components: NSCalendarUnitWeekday fromDate:firstDayInMonth];
NSInteger weekdayOfFirstDayInMonth = comps.weekday;