时间计算
/**
========================
|||date的延展,计算方法 |||
========================
*/
@interface NSDate (CustomCalendarView)
#pragma mark - 获取日
+ (NSInteger)day:(NSDate *)date;
#pragma mark - 获取月
+ (NSInteger)month:(NSDate *)date;
#pragma mark - 获取年
+ (NSInteger)year:(NSDate *)date;
#pragma mark - 获取当月第一天周几
+ (NSInteger)firstWeekdayInThisMonth:(NSDate *)date;
#pragma mark - 获取当前月有多少天
+ (NSInteger)totaldaysInMonth:(NSDate *)date;
#pragma mark - 获取年月日date
+ (NSDate *)dateByYear:(NSInteger)year Month:(NSInteger)month Day:(NSInteger)day;
#pragma mark - 获取上个月的date
+ (NSDate *)beforeMonthByCurrentDate:(NSDate *)date;
#pragma mark - 获取下个月的date
+ (NSDate *)nextMonthByCurrentDate:(NSDate *)date;
#pragma mark - 判断两个date是否同一天
+ (BOOL)isSameMonthByOne:(NSDate *)oneDay AndTwo:(NSDate *)twoDate;
+ (BOOL)isSameDayByOne:(NSDate *)oneDay AndTwo:(NSDate *)twoDate;
@end
@implementation NSDate (CustomCalendarView)
#pragma mark -- 获取日
+ (NSInteger)day:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
return components.day;
}
#pragma mark -- 获取月
+ (NSInteger)month:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
return components.month;
}
#pragma mark -- 获取年
+ (NSInteger)year:(NSDate *)date{
NSDateComponents *components = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
return components.year;
}
#pragma mark -- 获得当前月份第一天星期几
+ (NSInteger)firstWeekdayInThisMonth:(NSDate *)date{
NSCalendar *calendar = [NSCalendar currentCalendar];
//设置每周的第一天从周几开始,默认为1,从周日开始
[calendar setFirstWeekday:1];//1.Sun. 2.Mon. 3.Thes. 4.Wed. 5.Thur. 6.Fri. 7.Sat.
NSDateComponents *comp = [calendar components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [calendar dateFromComponents:comp];
NSUInteger firstWeekday = [calendar ordinalityOfUnit:NSCalendarUnitWeekday inUnit:NSCalendarUnitWeekOfMonth forDate:firstDayOfMonthDate];
//若设置从周日开始算起则需要减一,若从周一开始算起则不需要减
return firstWeekday - 1; //return 0:周日 1:周一 6:周六
}
#pragma mark -- 获取当前月共有多少天
+ (NSInteger)totaldaysInMonth:(NSDate *)date{
NSRange daysInLastMonth = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:date];
return daysInLastMonth.length;
}
#pragma mark - 获取年月日date
+ (NSDate *)dateByYear:(NSInteger)year Month:(NSInteger)month Day:(NSInteger)day{
NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = year;
components.month = month;
components.day = day;
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
#pragma mark - 获取上个月的date
+ (NSDate *)beforeMonthByCurrentDate:(NSDate *)date{
NSDateComponents *components = [[NSDateComponents alloc] init];
{
NSDateComponents *currenDtateComponents = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
NSInteger year = currenDtateComponents.year;
NSInteger month = currenDtateComponents.month;
if (month == 1) {
month = 12;
year -= 1;
}else{
month -= 1;
}
components.year = year;
components.month = month;
components.day = 1;
}
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
#pragma mark - 获取下个月的date
+ (NSDate *)nextMonthByCurrentDate:(NSDate *)date{
NSDateComponents *components = [[NSDateComponents alloc] init];
{
NSDateComponents *currenDtateComponents = [[NSCalendar currentCalendar] components:(NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:date];
NSInteger year = currenDtateComponents.year;
NSInteger month = currenDtateComponents.month;
if (month == 12) {
month = 1;
year += 1;
}else{
month += 1;
}
components.year = year;
components.month = month;
components.day = 1;
}
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
#pragma mark - 判断两个date是否同一天
+ (BOOL)isSameDayByOne:(NSDate *)oneDay AndTwo:(NSDate *)twoDate{
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents* comp1 = [[NSCalendar currentCalendar] components:unitFlags fromDate:oneDay];
NSDateComponents* comp2 = [[NSCalendar currentCalendar] components:unitFlags fromDate:twoDate];
return [comp1 day] == [comp2 day] &&
[comp1 month] == [comp2 month] &&
[comp1 year] == [comp2 year];
}
+ (BOOL)isSameMonthByOne:(NSDate *)oneDay AndTwo:(NSDate *)twoDate{
unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSDateComponents* comp1 = [[NSCalendar currentCalendar] components:unitFlags fromDate:oneDay];
NSDateComponents* comp2 = [[NSCalendar currentCalendar] components:unitFlags fromDate:twoDate];
return [comp1 month] == [comp2 month] && [comp1 year] == [comp2 year];
}
@end
待完善。。。。。。