美文网首页@产品
公历农历时间选择器

公历农历时间选择器

作者: 心情的蛊惑 | 来源:发表于2019-06-13 10:43 被阅读0次

由于公司项目有个新需求,需要弹出公历和农历相互转化的时间选择器(类似万年历的时间弹框)。刚拿到需求的时候,在网上搜索好久,发现农历的时间选择器都少之甚少,又何况公历和农历的相互转化的时间选择器。遍寻许久终于发现一位大佬写的农历时间选择器。在此基础之上,整合公司的需求,终于完成了任务。下面分享给大家。


屏幕快照 2019-06-06 下午4.11.31.png

点击农历按钮转化为农历


屏幕快照 2019-06-06 下午4.11.43.png

首先,要自定义一个公历时间选择器弹框,可以分为多种样式(年月日时,年月日,月日时等等)。


屏幕快照 2019-06-06 下午4.08.41.png

声明bool值_isNong判断是公历还是农历。只要点击农历按钮的时候,设置_isNong为yes,刷新pikerView即可。

#pragma mark -每一行显示viewForRow
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel *customLabel = (UILabel *)view;
    if (!customLabel) {
        customLabel = [[UILabel alloc] init];
        customLabel.textAlignment = NSTextAlignmentCenter;
        [customLabel setFont:[UIFont systemFontOfSize:12]];
    }
    NSString *title;
    if (_isNong) {
        //农历
        
        switch (self.dateStyle) {
            case DateStyleShowYearMonthDayHourMinute:{
                if (component==0) {
                    NSString * str = years[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    str =[NSString stringWithFormat:@"%@",  [array objectAtIndex:2]];
                    
                    title=   [NSString stringWithFormat:@"%@年", str];
                }
                if (component==1) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==2) {
                    NSString * str = days[row];
                    
                    int day = [str intValue];
                    
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:day]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                if (component==3) {
                    title = [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==4) {
                    title = [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
            }
                
                break;
            case DateStyleShowYearMonthDay:
            {
                if (component==0) {
                    NSString * str = years[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    str =[NSString stringWithFormat:@"%@",  [array objectAtIndex:2]];
                    
                    title=   [NSString stringWithFormat:@"%@年", str];
                }
                if (component==1) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==2) {
                    NSString * str = days[row];
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    //                        title=   [NSString stringWithFormat:@"%@", str];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:[days[row] integerValue]]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                
            }
                
                break;
            case DateStyleShowMonthDayHourMinute:
            {
                NSString *pYear=[_cal.year copy];
                if (![pYear isEqualToString:_cal.year]) {
                    [self changeMonths];
                }
                //                NSString *pMonth=[_cal.month copy];
                //
                //                if (![pMonth isEqualToString:_cal.month]) {
                //                    //联动天数的滚轮
                //                    [self changeDays];
                //                }
                if (component==0) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==1) {
                    NSString * str = days[row];
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    //                        title=   [NSString stringWithFormat:@"%@", str];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:[days[row] integerValue]]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                if (component==2) {
                    title = [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==3) {
                    title = [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
            }
                
                break;
            case DateStyleShowMonthDay:
            {
                NSString *pYear=[_cal.year copy];
                if (![pYear isEqualToString:_cal.year]) {
                    [self changeMonths];
                }
                NSString *pMonth=[_cal.month copy];
                
                if (![pMonth isEqualToString:_cal.month]) {
                    //联动天数的滚轮
                    [self changeDays];
                }
                if (component==0) {
                    NSString * str = months[row];
                    
                    NSArray *array=[str componentsSeparatedByString:@"-"];
                    if ([[array objectAtIndex:0]isEqualToString:@"a"]) {
                        str =[((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1];
                    } else {
                        str =[NSString stringWithFormat:@"%@%@", @"闰", [((IDJChineseCalendar *)_cal).chineseMonths objectAtIndex:[[array objectAtIndex:1]intValue]-1]];
                    }
                    
                    title=   [NSString stringWithFormat:@"%@", str];
                }
                if (component==1) {
                    NSString * str = days[row];
                    
                    
                    NSString *jieqi=[[IDJCalendarUtil jieqiWithYear:[_cal.year intValue]]objectForKey:[NSString stringWithFormat:@"%@-%d", _cal.month, [str intValue]]];
                    
                    if (!jieqi) {
                        str =[NSString stringWithFormat:@"%@", [((IDJChineseCalendar *) _cal).chineseDays objectAtIndex:[str intValue]-1]];
                    } else {
                        str=[NSString stringWithFormat:@"%@", jieqi];
                    }
                    //                        title=   [NSString stringWithFormat:@"%@", str];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithChineseYear:[_cal.year integerValue] month:_cal.month day:[days[row] integerValue]]];
                    title=   [NSString stringWithFormat:@"%@%@", str,[_weekArray objectAtIndex:weekday.intValue]];
                }
                
            }
                
                break;
                
            default:
                break;
        }
        
    }else {//阳历
        
        
        
        switch (self.dateStyle) {
            case DateStyleShowYearMonthDayHourMinute:
                if (component==0) {
                    title = [NSString stringWithFormat:@"%@年",_yearArray[row]];
                    
                }
                if (component==1) {
                    title = [NSString stringWithFormat:@"%@月",_monthArray[row]];
                    
                }
                if (component==2) {
                    
                    \
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                    
                }
                if (component==3) {
                    title = [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==4) {
                    title = [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
                break;
            case DateStyleShowYearMonthDay:
                if (component==0) {
                    title =  [NSString stringWithFormat:@"%@年",_yearArray[row]];
                }
                if (component==1) {
                    title =  [NSString stringWithFormat:@"%@月",_monthArray[row]];
                }
                if (component==2) {
                    
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                    
                    
                }
                break;
                
            case DateStyleShowMonthDayHourMinute:
                if (component==0) {
                    title =  [NSString stringWithFormat:@"%@月",_monthArray[row%12]];
                }
                if (component==1) {
                    //                    title = _dayArray[row];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                }
                if (component==2) {
                    title =  [NSString stringWithFormat:@"%@时",_hourArray[row]];
                }
                if (component==3) {
                    title =  [NSString stringWithFormat:@"%@分",_minuteArray[row]];
                }
                break;
            case DateStyleShowMonthDay:
                if (component==0) {
                    title = [NSString stringWithFormat:@"%@月",_monthArray[row%12]];
                }
                if (component==1) {
                    //                    title = _dayArray[row];
                    NSString * weekday = [NSString stringWithFormat:@"%d",[IDJCalendarUtil weekDayWithSolarYear:[_yearArray[yearIndex] integerValue] month:_monthArray[monthIndex] day:[_dayArray[row] integerValue]]];
                    
                    title = [NSString stringWithFormat:@"%@日%@",_dayArray[row],[_weekArray objectAtIndex:weekday.intValue ]];
                    
                }
                break;
                
            default:
                title = @"";
                break;
        }
        
        
    }
    
    
    customLabel.text = title;
    
    return customLabel;
    
}

关于农历,是参照大佬的(IDJChineseCalendar)封装改编的。当点击农历的时候,调用下面的方法

-(void)nongAction:(UIButton *)button{
    
    button.selected = !button.selected;
    _isNong = !_isNong;
    if (_isNong) {
        //显示农历数据
        _cal=[[IDJChineseCalendar alloc]initWithYearStart:MINYEAR end:MAXYEAR];
        [self _setYears];
        [self _setMonthsInYear:[_cal.year intValue]];
        [self _setDaysInMonth:_cal.month year:[_cal.year intValue]];
        
    }
    
    [self getNowDate:self.scrollToDate animated:YES];
    [self.datePicker reloadAllComponents];
    
    
    
}

相关文章

  • 公历农历时间选择器

    由于公司项目有个新需求,需要弹出公历和农历相互转化的时间选择器(类似万年历的时间弹框)。刚拿到需求的时候,在网上搜...

  • 农历与公历

    今天是农历正月初一,我照例是天不亮起床喝上几杯热茶。我想即便有朝一日,我去了欧美生活,喝热茶的习惯我也无法...

  • NSDate转换公历、农历

    最近研究天干地支五行八卦,纯(bu)粹(wu)爱(zheng)好(ye),如有写的不对的地方欢迎大家指出废话不多说...

  • 微信小程序 日期选择器加强版(带农历,可隐藏年份)

    最近开发的小程序需要用到日期选择器,小程序本身提供了公历的年月日选择器,而我的业务需求同时需要用到农历的日期和隐藏...

  • 公历、农历、黄历、日历、台历

    公历是当今国际上通用的历法,又称阳历。是以地球环绕太阳运转一周的时间作为一年的历法。 农历又称阴历,起源于我国夏代...

  • 农历和公历如何换算?

    每到旧历年行将结束的时候,家家户户都在辞旧迎新。这个时候总会特别关注农历年和公历年如何换算的问题。 我查了一下网络...

  • 在哭泣的心里写一篇沉痛思念的长文

    致我至亲至爱的父亲母亲 ———————————————— 农历2016.8.16,公历2016.9.16 这段时间...

  • 命理学的下半年来啦!甲申月(8.7-9.7)运势解析

    农历的日子,总是比平时记日的公历,时间再往后一些。 比如农历的新年——春节,就在公历新年元旦的一两个月后。 但很多...

  • 类似去哪儿中的日历控件

    类似去哪儿中的日历控件,显示农历,农历节日,公历节日,公历日期 Github:https://github.com...

  • 生日

    今天是我的生日。 农历公历都是。 农历十月二十五,公历12月9日。 1982年农历十月二十五对应着公历12月9日,...

网友评论

    本文标题:公历农历时间选择器

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