现在的位置: 首页 > 综合 > 正文

关于Calendar的一些方法

2014年06月07日 ⁄ 综合 ⁄ 共 3757字 ⁄ 字号 评论关闭

#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;

}

抱歉!评论已关闭.