小程序 从底部弹出时间选择

528 阅读2分钟

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

需求:小程序 从底部弹出时间选择 要求的效果是如图所示:

image.png

思路

需要两个数组就可以显示这个东西:第一个数组是包含所有我们要显示的信息,第二个数组是我们所选择下标信息的索引值 如果不理解这句话就看下面的实现过程:

  • 要想日期从底部弹出 可以使用Picker组件()(从底部弹起的滚动选择器) 从官方文档可知我们要从底部弹出一个 时间选择器 需要的是多列选择器 ,而对于不同的mode,picker拥有不同的属性 image.png

image.png 因此 如果要选择器显示不同的内容 最主要修改的就是大数组中的内容即range这个数组中的内容 这才是重点!!!!

  • 那么首先 range传入的是数组型 格式应该是:[[] [] []] ,从目前的需求来看,在这个大数组下面包含三个小数组,第一个小数组的内容就应该是(日期加周几),第二个小数组是具体哪一小时,第三个小数组是具体的分钟数。这里有三列,则这个时间选择器就弹出多少列(这里弹出的是三列)

例如选择(2021-01-15 周五) (02点) (20分) 那value(第二个数组)这个数组的值[1, 2, 2],这里的1,2,2是所选择的值在第一个大数组中每个小数组的索引值。当我们触发这个选择器的时候 当选择确定 就会改变value中数组的下标值 从而修改我们显示的数据 如下为第一个大数组中的数据: image.png

主要代码

展示的页面

  <view class="bottom-item-left">时间选择(未处理):</view>
  <picker class="bottom-item-right" mode="multiSelector" value="{{dateTime}}" bindchange="changeDateTime1" range="{{dateTimeArray}}">
    <view >
        <block wx:if="{{showtime == null}}">
         <input placeholder="请选择乘车时间"/> 
      </block>
      <block wx:else>
         <input placeholder="请选择乘车时间"    value="{{showtime}}"/> 
      </block>
    </view>
  </picker>
</view>
<view class="bottom-item">
  <view class="bottom-item-left">时间选择(处理后):</view>
  <view class="bottom-item-right">
   {{cartime}}
  </view>
</view>

image.png

JS代码

var dateTimePicker = require('../../utils/dateTimePicker.js');
/**
   * 生命周期函数--监听页面加载
   */
onLoad: function (options) {
//获取当前时间
var timestamp = Date.parse(new Date());
var date = new Date(timestamp);
 
// 获取完整的年月日 时分秒,以及默认显示的数组
var obj1 = dateTimePicker.dateTimePicker(30, date);
console.log("obj1",obj1);
this.setData({
  dateTimeArray: obj1.dateTimeArray,
  dateTime: obj1.dateTime,
});
},
//当触发选择时间得时候
changeDateTime1(e) {
  this.setData({ dateTime: e.detail.value });
  console.log("dateTime",this.data.dateTime);
  var changeTime = this.data.dateTimeArray[0][this.data.dateTime[0]]+" "+this.data.dateTimeArray[1][this.data.dateTime[1]]+" "+this.data.dateTimeArray[2][this.data.dateTime[2]];
  console.log("changeTime",changeTime);
  var times = changeTime.split(" ");
    var time =  times[0]+" "+times[2].substring(0,2)+":"+times[3].substring(0,2)+":00";
    this.setData({
    cartime: time,
    showtime: changeTime
    })
},

具体的代码可以查看:gitee.com/childrens_1…

总结

在微信小程序中 实现日期选择 这里分享的是通过数组的方式,主要利用微信原生写的 当然 通过数组的选择是比较不灵活的 他的日期选择范围是有限的 但是他的组合显示是比较灵活的 所以要根据具体情况选择合适的日期插件