美文网首页
iOS 日历计算

iOS 日历计算

作者: 风___________ | 来源:发表于2019-11-01 15:38 被阅读0次

时间计算

/**
========================
|||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

待完善。。。。。。

相关文章

网友评论

      本文标题:iOS 日历计算

      本文链接:https://www.haomeiwen.com/subject/enafbctx.html