#pragma mark - Calendar helpers
返回date所在月的第一天的日期,比如说date = 10月17日,那么返回的就是10月1日
- (NSDate *)firstDayOfMonthContainingDate:(NSDate
*)date
{
NSDateComponents *comps = [self.calendar
components NSYearCalendarUnit |
NSMonthCalendarUnit |
NSDayCalendarUnit)
fromDate:date];
[comps setDay:1];
return [self.calendar
dateFromComponents:comps];
}
通过设置firstday,然后返回星期数组(周日,周一,周二,。。。,周六)
enum {
startSunday = 1,//1表示星期的第一天是周日
startMonday = 2,//2表示星期的第一天是周一
};
typedef int startDay;
- (NSArray *)getDaysOfTheWeek
{ NSDateFormatter *dateFormatter = [[NSDateFormatter
alloc]
init];
// adjust array depending on which weekday should be first
NSArray *weekdays = [dateFormatter
shortWeekdaySymbols];
NSUInteger firstWeekdayIndex = [self.calendar
firstWeekday] -1;
if (firstWeekdayIndex >
0)
{
weekdays = [[weekdays subarrayWithRange:NSMakeRange(firstWeekdayIndex,7-firstWeekdayIndex)]arrayByAddingObjectsFromArray:[weekdays
subarrayWithRange:NSMakeRange(0,firstWeekdayIndex)]];
}
return weekdays;
}
返回date表示的日期是所在周的第几天
- (int)dayOfWeekForDate:(NSDate *)date
{
NSDateComponents *comps = [self.calendar
components:NSWeekdayCalendarUnit
fromDate:date];
return comps.weekday;
}
判断date是否是今天
- (BOOL)dateIsToday:(NSDate *)date {
NSDateComponents *otherDay = [self.calendar
components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:date];
NSDateComponents *today = [self.calendar
components:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
fromDate:[NSDate
date]];
return ([today
day] == [otherDay
day] && [today
month] == [otherDay
month] && [today
year] == [otherDay
year] && [today
era] == [otherDay
era]);
}返回date所在月的第几周
- (int)weekNumberInMonthForDate:(NSDate
*)date {
NSDateComponents *comps = [self.calendar
components NSWeekOfMonthCalendarUnit)
fromDate:date];
return comps.weekOfMonth;
}
返回date所在月共几周
- (int)numberOfWeeksInMonthContainingDate:(NSDate
*)date {
return [self.calendar
rangeOfUnit:NSWeekCalendarUnit
inUnit:NSMonthCalendarUnit
forDate:date].length;
}
判断date和self.monthShowing是在同一个月
- (BOOL)dateIsInMonthShowing:(NSDate
*)date {
NSDateComponents *comps1 = [self.calendar
components NSMonthCalendarUnit)
fromDate:self.monthShowing];
NSDateComponents *comps2 = [self.calendar
components NSMonthCalendarUnit)
fromDate:date];
return comps1.month == comps2.month;
}
返回date当前月的下一天,如果月份不同,则要进行判断,适当增加月数和年数
- (NSDate *)nextDay:(NSDate *)date {
NSDateComponents *comps = [[NSDateComponents
alloc]
init];
[comps setDay:1];
return [self.calendar
dateByAddingComponents:comps
toDate:date
options:0];
}
判断两个日期的先后顺序
- (NSComparisonResult)date:(NSDate *)firstdate compare:(NSDate*)secondate
{
NSLog(@"first = %@",firstdate);
NSLog(@"second = %@",secondate);
NSDateComponents *components = [self.calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate: firstdate];
NSInteger firstYear = components.year;
NSInteger firstMonth = components.month;
NSInteger firstDay = components.day;
NSDateComponents * calcomponents = [self.calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate: secondate];
NSInteger secondYear = calcomponents.year;
NSInteger secondMonth = calcomponents.month;
NSInteger secondDay = calcomponents.day;
NSComparisonResult result = NSOrderedSame;
if(firstYear < secondYear) {
result = NSOrderedAscending;
}
else if(firstYear == secondYear) {
if(firstMonth < secondMonth) {
result = NSOrderedAscending;
}
else if(firstMonth == secondMonth) {
if(firstDay < secondDay) {
result = NSOrderedAscending;
}
else if(firstDay == secondDay) {
result = NSOrderedSame;
}
else {
result = NSOrderedDescending;
}
}
else {
result = NSOrderedDescending;
}
}
else {
result = NSOrderedDescending;
}
return result;
}