【HarmonyOS】TextPicker日期选择

【HarmonyOS】利用TextPicker实现日期选择框只有【年】或者【年月】或【月日】

复制代码
@Entry
@Component
struct Page39 {
  @State generateYearMonth: TextCascadePickerRangeContent [] = []
  @State generateMonthDay: TextCascadePickerRangeContent [] = []
  @State generateYear: TextCascadePickerRangeContent [] = []

  generateYearMonthRange(startYear: number, endYear: number): TextCascadePickerRangeContent[] {
    const range: TextCascadePickerRangeContent[] = [];

    for (let year = startYear; year <= endYear; year++) {
      const months: TextCascadePickerRangeContent[] = [];
      for (let month = 1; month <= 12; month++) {
        months.push({
          text: `${month.toString().padStart(2, '0')}月` // 确保月份是两位数
        });
      }
      // 只有当月份数组不为空时,才添加到range中
      if (months.length > 0) {
        range.push({
          text: `${year}年`, // 使用年份作为文本
          children: months // 只有当月份不为空时,才设置children属性
        });
      }
    }

    return range; // 返回一维数组
  }

  generateMonthDayRange(year: number): TextCascadePickerRangeContent[] {
    const range: TextCascadePickerRangeContent[] = [];

    // 生成月份
    for (let month = 1; month <= 12; month++) {
      const days: TextCascadePickerRangeContent[] = [];

      // 计算每个月的天数
      let daysInMonth = new Date(year, month, 0).getDate();
      for (let day = 1; day <= daysInMonth; day++) {
        days.push({
          text: `${day.toString().padStart(2, '0')}日` // 确保天数是两位数
        });
      }

      range.push({
        text: `${month.toString().padStart(2, '0')}月`, // 使用月份作为文本
        children: days
      });
    }

    return range;
  }

  generateYearRange(startYear: number, endYear: number): TextCascadePickerRangeContent[] {
    const range: TextCascadePickerRangeContent[] = [];

    for (let year = startYear; year <= endYear; year++) {
      range.push({
        text: `${year}年`
      });
    }

    return range;
  }

  aboutToAppear(): void {
    this.generateYear = this.generateYearRange(2000, 2024);
    this.generateYearMonth = this.generateYearMonthRange(2000, 2024);
    this.generateMonthDay = this.generateMonthDayRange(2024);
  }

  build() {
    Column() {
      Button('指定【年】区间列表')
      TextPicker({ range: this.generateYear })
        .onChange((value: string | string[], index: number | number[]) => {
          console.info('TextPicker 多列联动:onChange ' + JSON.stringify(value) + ', ' + 'index: ' +
          JSON.stringify(index))
        })
      Button('指定【年】【月】区间列表')
      TextPicker({ range: this.generateYearMonth })
        .onChange((value: string | string[], index: number | number[]) => {
          console.info('TextPicker 多列联动:onChange ' + JSON.stringify(value) + ', ' + 'index: ' +
          JSON.stringify(index))
        })
      Button('【月】【日】区间列表')
      TextPicker({ range: this.generateMonthDay })
        .onChange((value: string | string[], index: number | number[]) => {
          console.info('TextPicker 多列联动:onChange ' + JSON.stringify(value) + ', ' + 'index: ' +
          JSON.stringify(index))
        })
    }
    .height('100%')
    .width('100%')
  }
}
复制代码

 

posted @   zhongcx  阅读(20)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示