/*计算这个月有多少天*/
- (NSUInteger)numberOfDaysInCurrentMonth
{
// 频繁调用 [NSCalendar currentCalendar] 可能存在性能问题
return [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:self].length;
}
//获取这个月有多少周
- (NSUInteger)numberOfWeeksInCurrentMonth
{
NSUInteger weekday = [[self firstDayOfCurrentMonth] weeklyOrdinality];
NSUInteger days = [self numberOfDaysInCurrentMonth];
NSUInteger weeks = 0;
if (weekday > 1) {
weeks += 1, days -= (7 - weekday + 1);
}
weeks += days / 7;
weeks += (days % 7 > 0) ? 1 : 0;
return weeks;
}
/*计算这个月的第一天是礼拜几*/
- (NSUInteger)weeklyOrdinality
{
return [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSWeekCalendarUnit forDate:self];
}
//计算这个月最开始的一天
- (NSDate *)firstDayOfCurrentMonth
{
NSDate *startDate = nil;
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&startDate interval:NULL forDate:self];
NSAssert1(ok, @"Failed to calculate the first day of the month based on %@", self);
return startDate;
}
- (NSDate *)lastDayOfCurrentMonth
{
NSCalendarUnit calendarUnit = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:calendarUnit fromDate:self];
dateComponents.day = [self numberOfDaysInCurrentMonth];
return [[NSCalendar currentCalendar] dateFromComponents:dateComponents];
}
//上一个月
- (NSDate *)dayInThePreviousMonth
{
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.month = -1;
return [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
}
//下一个月
- (NSDate *)dayInTheFollowingMonth
{
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.month = 1;
return [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
}
//获取当前日期之后的几个月
- (NSDate *)dayInTheFollowingMonth:(int)month
{
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.month = month;
return [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
}
//获取当前日期之后的几个天
- (NSDate *)dayInTheFollowingDay:(int)day
{
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
dateComponents.day = day;
return [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:self options:0];
}
后续慢慢更新。。。。。
网友评论