ios日期选择器时间范围从当先时间到今年最后一天

1、需求是一个日期选择器选择的时间只能从当期时间到今年最后一天不能选择过去时间,具体的实现可以百度搜索日期选择器

 最大时间和最小时间设置,其实原理差不多,而此需求需要的是计算从现在到今年年底剩下多少天即可,然后使用NSDateComponents  setday 来设置时间即可,带入如下

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];

    NSDate *currentDate = [NSDate date];

    // 定义一个时间字段的旗标,指定将会获取指定年、月、日、时、分、秒的信息

    unsigned unitFlags = NSCalendarUnitYear |

    NSCalendarUnitMonth |  NSCalendarUnitDay |

    NSCalendarUnitHour |  NSCalendarUnitMinute |

    NSCalendarUnitSecond | NSCalendarUnitWeekday;

    // 获取不同时间字段的信息

    NSDateComponents* comp = [calendar components: unitFlags

                                         fromDate:currentDate];

    

    

    NSDateComponents *minComps = [[NSDateComponents alloc] init];

    NSDateComponents *maxComps = [[NSDateComponents alloc] init];

    NSInteger curMonthMaxDay = [MonthHelper getMaxDayByMonth:comp.month year:comp.year];

    NSInteger leftMonth = 12 - comp.month;

    NSInteger leftDay = curMonthMaxDay - comp.day;

    NSInteger leftYears = 0;

    

    //如果已经是今年最后一天,那么需要增加一年的时间

    if (leftMonth == 0 && leftDay == 0) {

        leftYears = 1;

    }

    

    [maxComps setYear:leftYears];

    [maxComps setMonth:leftMonth];

    [maxComps setDay:leftDay];

    

    NSDate *maxDate = [calendar dateByAddingComponents:maxComps toDate:currentDate options:0];

    [minComps setYear:0];

    NSDate *minDate = [calendar dateByAddingComponents:minComps toDate:currentDate options:0];

    

    // 4.创建日期选择器

    BRDatePickerView *datePickerView = [[BRDatePickerView alloc]init];

    datePickerView.pickerMode = BRDatePickerModeYMDHM;

    datePickerView.maxDate = [NSDate date];

    datePickerView.isAutoSelect = NO;

    datePickerView.showUnitType = BRShowUnitTypeOnlyCenter;

    datePickerView.resultBlock = ^(NSDate *selectDate, NSString *selectValue) {

        NSLog(@"selectValue = %@",selectValue);

        self.selectTableTimeLabel.text = selectValue;

        self.selectTableTimeStr = selectValue;

    };

    

    datePickerView.maxDate = maxDate;

    datePickerView.minDate = minDate;

    

    

    // 自定义选择器主题样式

    datePickerView.pickerStyle = [self getpickerStyle];

    [datePickerView show];

 

 

-(BRPickerStyle*)getpickerStyle{

    BRPickerStyle *customStyle = [[BRPickerStyle alloc]init];

    customStyle.hiddenTitleLine = YES;

    customStyle.titleBarColor = BR_RGB_HEX(0x1a1a1a, 1.0f);

    customStyle.hiddenShadowLine = YES;

    customStyle.topCornerRadius = 20;

    customStyle.cancelBorderStyle = BRBorderStyleNone;

    customStyle.cancelBtnTitle = @"取消";

    customStyle.cancelTextColor = BR_RGB_HEX(0x8c8c8c, 1.0f);

    customStyle.cancelBtnFrame = CGRectMake(10, 10, 60, 50);

    

    customStyle.alertViewColor = BR_RGB_HEX(0x0a0a0a, 1.0f);

    customStyle.doneBorderStyle = BRBorderStyleNone;

    customStyle.doneBtnTitle = @"确定";

    customStyle.doneTextColor = BR_RGB_HEX(0xFFBE11, 1.0f);

    CGFloat donePosX = customStyle.doneBtnFrame.origin.x;

    customStyle.doneBtnFrame = CGRectMake(donePosX, 10, 60, 50);

    

    customStyle.pickerColor = BR_RGB_HEX(0x1a1a1a, 1.0f);

    customStyle.pickerTextColor = BR_RGB_HEX(0xFFFFFF, 1.0f);

    return customStyle;

}

posted @ 2020-11-28 21:47  MiKiNuo  阅读(490)  评论(0)    收藏  举报