得到一个月或是一个星期的最后一天 得到一个月或一个星期的第一天

//////////////////

NSCalendarUnit  传入NSWeekOfMonthCalendarUnit    代表星期

          传入NSMonthCalendarUnit              代表月

//得到一个月或是一个星期的最后一天

+(NSDate *)getLastDateWithCalendarUnit:(NSCalendarUnit)unit withDate:(NSDate *)fromDate

{

    NSDate *beginOfMonth = nil;

    NSTimeInterval endDate;

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

   //说明以星期一作为这星期的第一天。若传入1,则代表以星期天作为这星期的第一天

    [calendar setFirstWeekday:2];

    BOOL success = [calendar rangeOfUnit:unit startDate:&beginOfMonth interval:&endDate forDate:fromDate];

   

    if (!success){

        NSLog(@"Error:failed to get day.");

    }

    //NSTimeInterval转为int的类型。

    int day = ((int)endDate)/(3600*24);

    //将日期解析到NSDateComponent对象中去。

    NSDateComponents *monthComponent = [calendar components:NSMonthCalendarUnitfromDate:fromDate];

    NSDateComponents *component = [[NSDateComponentsalloc]init];

    [component setDay:day];

    [component setMonth:[monthComponent month]];

    //这段代码是从NSDateComponent获得NSDate。下面得到的是一个月的最后一天。

    NSDate *lastDate = [calendar dateFromComponents:component];

    return lastDate;

}

//得到一个月或一个星期的第一天

+ (NSDate *)getFirstDateWithCalendarUnit:(NSCalendarUnit)unit withDate:(NSDate *)fromDate

{

    NSDate *beginOfMonth = nil;

    NSTimeInterval endDate;

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

    [calendar setFirstWeekday:2];

    BOOL success = [calendar rangeOfUnit:unit startDate:&beginOfMonth interval:&endDate forDate:fromDate];

    

    if (success){

        return beginOfMonth;

    }else{

        return nil;

    }

}

//得到本月或是本周的日期数组,返回的数组为这个月或是这星期截止到今天的所有日期

+ (NSMutableArray *)getArrayWithCalendarUnit:(NSCalendarUnit)unit withDate:(NSDate *)withDate

{

    NSTimeInterval secondsPerDay = 24 * 60 * 60;

    NSDateFormatter *dateFormatter = [[NSDateFormatteralloc] init];

    [dateFormatter setDateFormat:@"yyyy-MM-dd"];

    NSString *todayStr = [dateFormatter stringFromDate:withDate];

    

    NSDate *beginningOfMonth = nil;

    NSCalendar *calendar = [NSCalendarcurrentCalendar];

    [calendar setFirstWeekday:2];

    BOOL ok = [calendar rangeOfUnit:unit startDate:&beginningOfMonth interval:NULL forDate:withDate];

    if (ok) {

        NSLog(@"beginningOfMonth = %@", beginningOfMonth);

        NSMutableArray *dateArray = [NSMutableArray new];

        for (int i = 0; i < 30; i ++) {

    //dateString为这个月或是星期的第一天

            NSString *dateString = [dateFormatter stringFromDate:beginningOfMonth];

            if ([dateString isEqualToString:todayStr]) {

                [dateArray addObject:todayStr];

                return dateArray;

            }else{

                [dateArray addObject:dateString];

                NSDate *nextDay = [beginningOfMonth dateByAddingTimeInterval:secondsPerDay];

                beginningOfMonth = nextDay;

            }

        }

    }

    returnNil;

}

原文地址:https://www.cnblogs.com/wudan7/p/3687341.html