关于Calendar的一些方法


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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值