zoukankan      html  css  js  c++  java
  • 微信小程序的年月日-年月日选择器基于picker的mode = multiSelector日期范围

    const date = new Date();
    const years = [];
    const months = [];
    const days = [];
    const years2 = [];
    const months2 = [];
    const days2 = [];
    const yearIndex = date.getFullYear()-2010
    const monthIndex = date.getMonth()
    const dayIndex = date.getDate() - 1 
    //获取年 i是起始年份, i<=结束年份(当前年份+5)
    for (let i = 2010; i <= date.getFullYear() + 5 ; i++) {
        years.push("" + i);
    }
    //获取月份
    for (let i = 1; i <= 12; i++) {
        if (i < 10) {
            i = "0" + i;
        }
        months.push("" + i);
    }
    //获取日期
    for (let i = 1; i <= 31; i++) {
        if (i < 10) {
            i = "0" + i;
        }
        days.push("" + i);
    }
    //获取第二行年份
    for (let i = 2010; i <= date.getFullYear() + 5 ; i++) {
        years2.push("" + i);
    }
    //获取第二行月份
    for (let i = 1; i <= 12; i++) {
        if (i < 10) {
            i = "0" + i;
        }
        months2.push("" + i);
    }
    //获取第二行日期
    for (let i = 1; i <= 31; i++) {
        if (i < 10) {
            i = "0" + i;
        }
        days2.push("" + i);
    }
    data: {
        date: '2016-09-01',
        time: '',
        multiArray: [years, months, days,"-", years2, months2, days2],
        multiIndex: [yearIndex,0,0,0, yearIndex,monthIndex,dayIndex],
      },
     bindMultiPickerChange(e) {
        console.log("1111111111");
        this.setData({
          multiIndex:e.detail.value
        })
        var index = this.data.multiIndex
        var year = this.data.multiArray[0][index[0]]
        var month = this.data.multiArray[1][index[1]]
        var day = this.data.multiArray[2][index[2]]
        var year2 = this.data.multiArray[4][index[4]]
        var month2 = this.data.multiArray[5][index[5]]
        var day2 = this.data.multiArray[6][index[6]]
        console.log(this.data.multiArray);
        console.log(index);
        this.setData({
          starttime: year + '-' + month + '-' + day,
          endtime: year2 + '-' + month2 + '-' + day2,
          showCanvas: false
        });
        console.log(year + '-' + month + '-' + day);
        console.log(year2 + '-' + month2 + '-' + day2);
        this.getIndexData();
      },
      bindMultiPickerColumnChange(e) {
        //获取年份
        var _this = this;
        var column = e.detail.column;
        var array = this.data.multiArray;  //例 array[0][index[0]] 代表开始年份的值 array[0]代表开始年份列表
        var index = this.data.multiIndex ;  // index[0] 代表开始年份的下标
        index[column] = e.detail.value;
        this.setData({
          multiIndex:index
        })
        if(column == 0){
            //修改开始年份需要同步更新结束年份列表,为了不出现显示bug,还得同步更新点开始日期列表
            array[2] = this.getday(1,array[1][index[1]],array[0][index[0]])
            array[4] = this.getyear(array[0][index[0]])
            if(array[4].length<=index[4]){//如果结束年份列表长度不足,显示列表头
              index[4] = 0;
              this.setData({
                multiIndex:index
              })
            }
            if(array[1][index[1]] == array[5][index[5]]){  //如果月份相同,同步结束日期列表
              array[6] = this.getday(index[2]+1,array[5][index[5]],array[4][index[4]])
            }
            _this.setData({
              multiArray:array
            })
        }else if(column == 4){
            //修改结束年份需要修改 结束日期列表 和 结束月份列表,如果 开始年份和结束年份 一致,开始月份不能小于结束月份,
            if(array[0][index[0]] == array[4][index[4]] && array[1][index[1]] > array[5][index[5]]){
              array[5] = this.getmonth(index[1]+1)
                if(array[1][index[1]] >= array[5][index[5]]){ //修改了结束月份列表后,判断结束日期列表如何修改
                  array[6] = this.getday(index[2]+1,array[5][index[5]],array[4][index[4]])
                }else{
                  array[6] = this.getday(1,array[5][index[5]],array[4][index[4]])
                }
            }else{  //如果开始年份小于结束年份,需要显示所有月份和所有日期
              array[5] = this.getmonth()
              array[6] = this.getday(1,array[5][index[5]],array[4][index[4]])
            }
            _this.setData({
              multiArray:array
            })
        }else if(column == 1 || column == 5 ){ //月份发生改变,响应的日期列表也要改变
            array[column+1] = this.getday(1,array[column][index[column]],array[column-1][index[column-1]])
            //年份相同的时候,开始月份不能大于结束月份
            if(array[0][index[0]] == array[4][index[4]] ){
                let monthi = parseInt(array[1][index[1]])
                array[5] = this.getmonth(monthi)
                if(array[5].length<=index[5]){//如果结束月份列表长度不足,显示列表头
                  array[5] = 0
                }
                //判断一下月份,不判断下标是因为两个列表的长度很可能不同
                let value = array[column][index[column]]
                if((value == 4 || value == 6 || value == 9 || value == 11) && index[column+1] == 30 ){
                  array[2] = 29
                  array[6] = 29
                }else if(value == 2 && index[column+1] > 27){
                  array[2] = 27
                  array[6] = 27
                }
                //修改结束日期列表
                if(array[1][index[1]] == array[5][index[5]]){
                  array[6] = this.getday(array[2][index[2]],array[5][index[5]],array[4][index[4]])
                }
            }
            _this.setData({
              monthIndex:index,
               multiArray:array
            })
        }else if(column == 2 && array[0][index[0]] == array[4][index[4]] && array[1][index[1]] == array[5][index[5]]){
            //如果年份和月份都相同,同步结束日期
            array[6] = this.getday(array[2][index[2]],array[1][index[1]],array[0][index[0]])
            if(array[6].length<=index[6]){//如果结束日期列表长度不足,显示列表头
              index[6] = 0
            }
            _this.setData({
              multiArray:array
           })
        }
        
        }, getyear(e){
          let year = e?e:2010
          let years = []
          for (let i = year; i <= new Date().getFullYear() + 5 ; i++) {
              years.push("" + i);
          }
          return years
        },
        getmonth(e){
          let month = e?e:1 
          let months = []
          for (let i = month; i <= 12; i++) {
              if (i < 10) {
                  i = "0" + i;
              }
              months.push("" + i);
          }
          return months
        },
        getday(d,m,y){ 
          let dm = 31
          if (m == 4 || m == 6 || m == 9 || m == 11){
              dm = 30
              if(d == 31){
                  d = 30
              }
          }else if( m == 2 ){
              if(y&&((y % 400 == 0) || (y % 100 != 0)) && (y % 4 == 0)){
                  dm = 29
              }else{
                  dm = 28
              }
              if(d > 28){
                  d = 28
              }
          }
          let days = []
          for (let i = d; i <= dm; i++) {
              if (i < 10) {
                  i = "0" + i;
              }
              days.push("" + i);
          }
          return days
        },

      

    微信小程序的双时间选择器基于picker的mode = multiSelector

    <picker
    mode="multiSelector"
    bindchange="bindMultiPickerChange"
    bindcolumnchange="bindMultiPickerColumnChange"
    value="{{multiIndex}}"
    range="{{multiArray}}"
    >
    时间
    </picker>

    来源:https://blog.csdn.net/weixin_41887529/article/details/88865472

  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/xqschool/p/13307093.html
Copyright © 2011-2022 走看看