微信小程序日期时间自定义组件格式year-month-day hour-minute-second

微信小程序关于日期时间的picker只有两种mode,date和time,一个时日期,一个是时间,如果有时我们需要时期加时间格式的picker,只能自定义一个了

wxml:

<picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{{multiIndex}}" range="{{multiArray}}">
<view>
<text>{{orderData}}</text>
</view>
</picker>

 

js:

var util = require('../../utils/utils.js');      //引入utils.js   ,这个一般小程序都会有, 没有的话随便找一个复制就行了,就是小程序关于日期的
page({
  data:{
    
    multiIndex: [0, 0, 0, 0, 0, 0],
    multiArray: [],
    year: "",
    month: "",
    day: "",
    startHour: "",
    endHour: "",
    orderData: "选择预约时间",
    multiArray: [],
  },
    
//月份计算

surplusMonth: function (year) {
  var date = new Date();
  var year2 = date.getFullYear()
  var month = date.getMonth() + 1
  var day = date.getDate()
  var hour = date.getHours()
  var minute = date.getMinutes()
  var second = date.getSeconds()
  var monthDatas = [];
  if (year == year2) {
    var surplusMonth = 12 - month;
    monthDatas.push(month + "月")
    for (var i = month; i < 12; i++) {
      monthDatas.push(i + 1 + "月")
    }
  } else {

    for (var i = 0; i < 12; i++) {
    monthDatas.push(i + 1 + "月")
  }
}
return monthDatas;

},
 
  
//天数计算

surplusDay: function (year, month, day) {
  var days = 31;
  var dayDatas = [];
  var date = new Date();
  var year2 = date.getFullYear()
  var month2 = date.getMonth() + 1
  switch (parseInt(month)) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
    days = 31;
    break;
  //对于2月份需要判断是否为闰年
    case 2:
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
      days = 29;
      break;
    } else {
      days = 28;
      break;
    }
      case 4:
      case 6:
      case 9:
      case 11:
      days = 30;
      break;
    }
    if (year == year2 && month == month2) {
      dayDatas.push(day + "日")
      for (var i = day; i < days; i++) {
        dayDatas.push(i + 1 + "日")
      }
    } else {
      console.log(month + "月" + days + "天")
      for (var i = 0; i < days; i++) {
        dayDatas.push(i + 1 + "日")
      }
    }
      return dayDatas;
    },
 
    
//时间计算

surplusHour: function (year, month, day, hour) {
    var date = new Date();
    var year2 = date.getFullYear()
    var month2 = date.getMonth() + 1
    var day2 = date.getDate();
    var hourEnd = [4, 8, 12, 16, 20, 24];
    var hours = [['00时', '04时', '08时', '12时', '16时', '20时'], ['04时', '08时', '12时', '16时', '20时', '24时']];
    if (year == year2 && month == month2 && day == day2) {
      var hour2 = hour
      var j = 0;
      for (var i = 0; i < hourEnd.length; i++) {
        console.log("离24点还" + (hourEnd[i] - hour))
        if ((hourEnd[i] - hour) > 0) {
          console.log("i" + i)
          j = i;
          break;
        }
      }
      var surplusHours = [[], []];
      for (var i = j; i < hours[0].length; i++) {
        console.log(hours[0][i])
        surplusHours[0].push(hours[0][i]);
      }
      for (var i = j; i < hours[1].length; i++) {
        console.log(hours[1][i])
        surplusHours[1].push(hours[1][i]);
      }
        hours = surplusHours;
      }
        return hours;
      },
 
      
//某一列的值改变时触发

bindMultiPickerColumnChange: function (e) {
    var date = new Date();
    var year1 = date.getFullYear()
    var month1 = date.getMonth() + 1
    var day1 = date.getDate()
    var hour1 = date.getHours()
    console.log("当前年份" + this.data.month + '修改的列为', e.detail.column, ',值为', e.detail.value);
    var data = {
      multiArray: this.data.multiArray,
      multiIndex: this.data.multiIndex,
      year: this.data.year,
      month: this.data.month,
      day: this.data.day,
      startHour: this.data.startHour,
      endHour: this.data.startHour,
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch (e.detail.column) {
      case 0:
      var yearStr = data.multiArray[e.detail.column][e.detail.value];
      var year = yearStr.substring(0, yearStr.length - 1)
      data.year = parseInt(year);
      var surplusMonth = this.surplusMonth(year);
      data.multiArray[1] = surplusMonth;
      if (data.year == year1) {
        data.month = month1;
      } else {
        data.month = 1;
      }
      if (data.year == year1 && month1 == data.month) {
        data.day = day1;
      } else {
        data.day = 1;
      }
      var surplusDay = this.surplusDay(data.year, data.month, data.day);
      data.multiArray[2] = surplusDay;
      var surplusHour;
      if (data.year == year1 && month1 == data.month && data.day == day1) {
        surplusHour = this.surplusHour(data.year, data.month, data.day, hour1)
      } else {
        surplusHour = this.surplusHour(data.year, data.month, data.day, 1)
      }
      console.log(surplusHour)
      data.multiArray[3] = surplusHour[0];
      data.multiArray[5] = surplusHour[1];
      data.startHour = surplusHour[0];
      data.endHour = surplusHour[1];
      data.multiIndex[1] = 0;
      data.multiIndex[2] = 0;
      data.multiIndex[3] = 0;
      data.multiIndex[5] = 0;
      break;
      case 1:
      console.log('选择月份' + data.multiArray[e.detail.column][e.detail.value]);
      var monthStr = data.multiArray[e.detail.column][e.detail.value];
      var month = monthStr.substring(0, monthStr.length - 1);
      data.month = month;
      data.day = 1;
      if (data.year == year1 && month1 == data.month) {
        data.day = day1;
      } else {
        data.day = 1;
      }
      var surplusDay = this.surplusDay(data.year, data.month, data.day);
      data.multiArray[2] = surplusDay;
      var surplusHour;
      if (data.year == year1 && month1 == data.month && data.day == day1) {
        surplusHour = this.surplusHour(data.year, data.month, data.day, hour1)
      } else {
        surplusHour = this.surplusHour(data.year, data.month, data.day, 1)
      }
      data.multiArray[3] = surplusHour[0];
      data.multiArray[5] = surplusHour[1];
      data.startHour = surplusHour[0];
      data.endHour = surplusHour[1];
      data.multiIndex[2] = 0;
      data.multiIndex[3] = 0;
      data.multiIndex[5] = 0;
      break;
      case 2:
      console.log('选择日' + data.multiArray[e.detail.column][e.detail.value]);
      var dayStr = data.multiArray[e.detail.column][e.detail.value];
      var day = dayStr.substring(0, dayStr.length - 1);
      data.day = day;
      var surplusHour;
      if (data.year == year1 && month1 == data.month && data.day == day1) {
        surplusHour = this.surplusHour(data.year, data.month, data.day, hour1)
      } else {
        surplusHour = this.surplusHour(data.year, data.month, data.day, 1)
      }
      data.multiArray[3] = surplusHour[0];
      data.multiArray[5] = surplusHour[1];
      data.startHour = surplusHour[0];
      data.endHour = surplusHour[1];
      data.multiIndex[3] = 0;
      data.multiIndex[5] = 0;
      break;
      case 3:
      console.log('起始时间' + data.multiArray[e.detail.column][e.detail.value]);
      var hourStr = data.multiArray[e.detail.column][e.detail.value];
      var hour = hourStr.substring(0, hourStr.length - 1);
      data.startHour = hour;
      console.log('起始时间' + hour);
      var endhours2 = [];
      if (data.year == year1 && data.month == month1 && data.day == day1) {
        var surplusHour = this.surplusHour(data.year, data.month, data.day, hour);
        endhours2 = surplusHour[1]
      } else {
        var end = ['04时', '08时', '12时', '16时', '20时', '24时'];
        for (var i = e.detail.value; i < end.length; i++) {
          endhours2.push(end[i]);
        }
      }
      data.multiArray[5] = endhours2;

      data.multiIndex[5] = 0;
      break;
      case 5:
      var hourStr = data.multiArray[e.detail.column][e.detail.value];
      var hour = hourStr.substring(0, hourStr.length - 1);
      data.endHour = hour;
      console.log('结束时间' + data.multiArray[e.detail.column][e.detail.value]);
      break;
      }
      this.setData(data)
},
  
bindMultiPickerChange: function (e) {
  var dateStr =
      this.data.multiArray[0][this.data.multiIndex[0]] +
      this.data.multiArray[1][this.data.multiIndex[1]] +
      this.data.multiArray[2][this.data.multiIndex[2]] +
      this.data.multiArray[3][this.data.multiIndex[3]] +
      this.data.multiArray[4][this.data.multiIndex[4]] +
      this.data.multiArray[5][this.data.multiIndex[5]];
      console.log('picker发送选择改变,携带值为', dateStr)
      this.setData({
        orderData: dateStr
      })
},
   
onLoad: function (e) {
  
    var date = new Date();
    var year = date.getFullYear()
    var month = date.getMonth() + 1
    var day = date.getDate()
    var hour = date.getHours()
    var surplusMonth = this.surplusMonth(year);

    console.log(surplusMonth)
    var surplusDay = this.surplusDay(year, month, day);
    console.log(surplusDay)
    var surplusHour = this.surplusHour(year, month, day, hour)
    console.log(surplusHour)
    this.setData({
      multiArray: [[year + '年', (year + 1) + '年', (year + 2) + '年', (year + 3) + '年', (year + 4) + '年', (year + 5) + '年', (year + 6) + '年', (year + 7) + '年', (year + 8) + '年'],     //这个需要多少年就再继续往后复制数字++
      surplusMonth,
      surplusDay,
      surplusHour[0],
      ['~'],
      surplusHour[1]
      ],
      year: year,
      month: month,
      day: day,
      startHour: surplusHour[0][0],
      endHour: surplusHour[1][0],
    
    })
   }
 
})
 
 
 
没啥问题复制过去就能用了
posted on 2019-11-19 10:34  万能的李大少  阅读(1512)  评论(0编辑  收藏  举报