//////////////////
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;
}