微信小程序时间选择器

实现结果:

代码:

在utils文件夹中新建一个dateSetting.js的文件,存放代码段

//dateSetting.js
//将当前日期写成常量
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
const day = date.getDay()+1;
const hour = date.getHours();
const minute = date.getMinutes();
//确定月份呈现
function determineMonth() {
  let monthDates = [];
  for (let i = month; i <= 12; i++) {
    // if(i<10)
    // {
    //   monthDates.push()
    // }
    monthDates.push(i+"");
  }
  for (let i = 1; i < month; i++) {
    monthDates.push(i+"")
  }
  return monthDates;
}
//根据年与月确定日的呈现
function determineDay(year, month) {
  let dayDates = [];
  let days;
  switch (parseInt(month)) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
      days = 31;
      break;
    case 4:
    case 6:
    case 9:
    case 11:
      days = 30;
      break;
    case 2:
      if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        days = 28
      } else days = 29;
  }
  for (let i = day; i <= days; i++) {
    dayDates.push(i+"");
  }
  for (let i = 1; i <= day; i++) {
    dayDates.push(i+"");
  }
  return dayDates;
}
//确定小时的呈现
function determineHour() {
  let hourDates = [];
  for (let i = hour; i <= 24; i++) {
    hourDates.push(i+"");
  }
  for (let i = 1; i < hour; i++) {
    hourDates.push(i+"");
  }
  return hourDates;
}
//确定分的呈现
function determineMinute() {
  let minuteDates = [];
  let minuteNum=0;
  if (parseInt(minute) % 10 >= 5) {
    minuteNum = (parseInt(minute / 10) + 1) * 10;
  } else {
    minuteNum = parseInt(minute / 10) * 10;
  }
  for (let i = minuteNum; i < 60; i += 5) {
    minuteDates.push(i+"")
  }
  for (let i = 0; i < minuteNum; i += 5) {
    minuteDates.push(i+"")
  }
  return minuteDates;
}
//将上述函数导出,这样引入文件后可以直接使用导出的函数
module.exports = {
  determineMonth:determineMonth,
  determineDay:determineDay,
  determineHour:determineHour,
  determineMinute:determineMinute,
}

在你所要使用时间选择器的页面中

<view class="endtime">
  <picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange" value="{
   
   {multiIndex}}" range="{
   
   {multiArray}}">
    <input name="endtime" class="chosetime" value='{
   
   {time}}' placeholder='选择时间' placeholder-class="chosetime-style"/>
  </picker>
</view>

//js
//引入事先写好的日期设置util.js文件
var datePicker = require('../../utils/dateSetting.js')
 
//设定当前的时间,将其设定为常量
const date = new Date();
const year = date.getFullYear();
const month = date.getMonth() + 1;
Page({
  //与wxml中的数据一一对应,在具体函数中修改time、multiArray、multiIndex等值,进行页面的呈现
  data: {
    photos:[],
    time: '',
    multiArray: [],
    multiIndex: [0, 0, 0, 0, 0],
    choose_year: "",
  },
 onLoad: function () {
    this.setData({
      multiArray:
        [
          [year , year + 1 , year + 2 ],
          datePicker.determineMonth(),
          datePicker.determineDay(year, month),
          datePicker.determineHour(),
          datePicker.determineMinute()
        ],
    })
  },
  //最后呈现时间的函数。
  bindMultiPickerChange: function (e) {
    //年
    var dateStr = this.data.multiArray[0][this.data.multiIndex[0]] +"-";
    //月
    if(this.data.multiArray[1][this.data.multiIndex[1]]<10)
    {
      dateStr=dateStr+"0"+this.data.multiArray[1][this.data.multiIndex[1]] +"-";
    }
    else{
      dateStr=dateStr+this.data.multiArray[1][this.data.multiIndex[1]] +"-";
    }
    //日
    if(this.data.multiArray[2][this.data.multiIndex[2]]<10)
    {
      dateStr=dateStr+"0"+this.data.multiArray[2][this.data.multiIndex[2]]+" ";
    }
    else{
      dateStr=dateStr+this.data.multiArray[2][this.data.multiIndex[2]]+" ";
    }
    //时
    if(this.data.multiArray[3][this.data.multiIndex[3]]<10)
    {
      dateStr=dateStr+"0"+this.data.multiArray[3][this.data.multiIndex[3]]+":";
    }
    else
    {
      dateStr=dateStr+this.data.multiArray[3][this.data.multiIndex[3]]+":";
    }
    if(this.data.multiArray[4][this.data.multiIndex[4]]<10)
    {
      dateStr=dateStr+"0"+this.data.multiArray[4][this.data.multiIndex[4]];
    }
    else{
      dateStr=dateStr+this.data.multiArray[4][this.data.multiIndex[4]];
    }
    this.setData({
      time: dateStr
    })
  },
  //当时间选择器呈现并进行滚动选择时间时调用该函数。
  bindMultiPickerColumnChange: function (e) {
    //e.detail.column记录哪一行发生改变,e.detail.value记录改变的值(相当于multiIndex)
    switch (e.detail.column) {
      //这里case的值有0/1/2/3/4,但除了需要记录年和月来确定具体的天数外,其他的都可以暂不在switch中处理。
      case 0:
        //记录改变的年的值
        let year = this.data.multiArray[0][e.detail.value];
        this.setData({
          choose_year: year.substring(0, year.length - 1)
        })
        break;
      case 1:
        //根据选择的年与月,确定天数,并改变multiArray中天的具体值
        let month = this.data.multiArray[1][e.detail.value];
        let dayDates = datePicker.determineDay(this.data.choose_year, month.substring(0, month.length - 1));
        //这里需要额外注意,改变page中设定的data,且只要改变data中某一个值,可以采用下面这种方法
        this.setData({
          ['multiArray[2]']: dayDates
        })
        break;
    }
    //同上,上面改变的是二维数组中的某一个一维数组,这个是改变一个一维数组中某一个值,可供参考。
    this.setData({
      ["multiIndex[" + e.detail.column + "]"]: e.detail.value
    })
  },
})

猜你喜欢

转载自blog.csdn.net/HUmOrOus02/article/details/127856124