微信小程序日期时间选择器使用方法

本文实例为大家分享了精确到秒的微信小程序日期时间选择器,供大家参考,具体内容如下

效果

精确到秒的微信小程序日期时间选择器

实现原理

利用微信小程序的picker组件的多列选择器实现!

WXML

<view class="tui-picker-content">
<view class="tui-picker-name">日期选择器(选择年月日)
<picker mode="date" value="{{date}}" start="2017-10-01" end="2017-10-08" bindchange="changeDate">
<view class="tui-picker-detail">
国庆出游: {{date}}

<view class="tui-picker-content">
<view class="tui-picker-name">日期时间选择器(精确到秒)
<picker mode="multiSelector" value="{{dateTime}}" bindchange="changeDateTime" bindcolumnchange="changeDateTimeColumn" range="{{dateTimeArray}}">
<view class="tui-picker-detail">
选择日期时间: {{dateTimeArray[0][dateTime[0]]}}-{{dateTimeArray[1][dateTime[1]]}}-{{dateTimeArray[2][dateTime[2]]}} {{dateTimeArray[3][dateTime[3]]}}:{{dateTimeArray[4][dateTime[4]]}}:{{dateTimeArray[5][dateTime[5]]}}

WXSS

使用的是三级联动选择器的样式,所以直接 import 引入!

JS

Page({
data: {
date: '2018-10-01',time: '12:00',dateTimeArray: null,dateTime: null,dateTimeArray1: null,dateTime1: null,startYear: 2000,endYear: 2050
},onLoad(){
// 获取完整的年月日 时分秒,以及默认显示的数组
var obj = dateTimePicker.dateTimePicker(this.data.startYear,this.data.endYear);
var obj1 = dateTimePicker.dateTimePicker(this.data.startYear,this.data.endYear);
// 精确到分的处理,将数组的秒去掉
var lastArray = obj1.dateTimeArray.pop();
var lastTime = obj1.dateTime.pop();

this.setData({
dateTime: obj.dateTime,dateTimeArray: obj.dateTimeArray,dateTimeArray1: obj1.dateTimeArray,dateTime1: obj1.dateTime
});
},changeDate(e){
this.setData({ date:e.detail.value});
},changeTime(e){
this.setData({ time: e.detail.value });
},changeDateTime(e){
this.setData({ dateTime: e.detail.value });
},changeDateTime1(e) {
this.setData({ dateTime1: e.detail.value });
},changeDateTimeColumn(e){
var arr = this.data.dateTime,dateArr = this.data.dateTimeArray;

arr[e.detail.column] = e.detail.value;
dateArr[2] = dateTimePicker.getMonthDay(dateArr[0][arr[0]],dateArr[1][arr[1]]);

this.setData({
dateTimeArray: dateArr,dateTime: arr
});
},changeDateTimeColumn1(e) {
var arr = this.data.dateTime1,dateArr = this.data.dateTimeArray1;

arr[e.detail.column] = e.detail.value;
dateArr[2] = dateTimePicker.getMonthDay(dateArr[0][arr[0]],dateArr[1][arr[1]]);

this.setData({
dateTimeArray1: dateArr,dateTime1: arr
});
}
})

外部JS,dateTimePicker.js的引入

switch (month) {
case '01':
case '03':
case '05':
case '07':
case '08':
case '10':
case '12':
array = getLoopArray(1,31)
break;
case '04':
case '06':
case '09':
case '11':
array = getLoopArray(1,30)
break;
case '02':
array = flag ? getLoopArray(1,29) : getLoopArray(1,28)
break;
default:
array = '月份格式不正确,请重新输入!'
}
return array;
}
function getNewDateArry(){
// 当前时间的处理
var newDate = new Date();
var year = withData(newDate.getFullYear()),mont = withData(newDate.getMonth() + 1),date = withData(newDate.getDate()),hour = withData(newDate.getHours()),minu = withData(newDate.getMinutes()),seco = withData(newDate.getSeconds());

return [year,mont,date,hour,minu,seco];
}
function dateTimePicker(startYear,endYear,date) {
// 返回默认显示的数组和联动数组的声明
var dateTime = [],dateTimeArray = [[],[],[]];
var start = startYear || 1978;
var end = endYear || 2100;
// 默认开始显示数据
var defaultDate = date ? [...date.split(' ')[0].split('-'),...date.split(' ')[1].split(':')] : getNewDateArry();
// 处理联动列表数据
/年月日 时分秒/
dateTimeArray[0] = getLoopArray(start,end);
dateTimeArray[1] = getLoopArray(1,12);
dateTimeArray[2] = getMonthDay(defaultDate[0],defaultDate[1]);
dateTimeArray[3] = getLoopArray(0,23);
dateTimeArray[4] = getLoopArray(0,59);
dateTimeArray[5] = getLoopArray(0,59);

dateTimeArray.forEach((current,index) => {
dateTime.push(current.indexOf(defaultDate[index]));
});

return {
dateTimeArray: dateTimeArray,dateTime: dateTime
}
}
module.exports = {
dateTimePicker: dateTimePicker,getMonthDay: getMonthDay
}

总结

  • 将初始化列表以及初始化默认显示的数组放到dateTimePicker.js,防止页面逻辑太乱,而且可以多处使用;
  • 判断是否为闰年,在三木表达式中,必须将能别400整除放在前边,因为或运算只要一个条件满足,就会返回true,不会执行后续表达式;
  • switch case的合并方法需要注意格式;
  • 如果只需要联动列表更新,二结果展示栏不更新,则在changeDateTimeColumn函数中只更新dateTimeArray的值。

DEMO

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

1. 获取输入框数据wxml中的input上增加bindinput属性,和方法值在js部分定义与之对应的方法,只要在输入...
1.map组件的高度如果想要铺满屏幕,要是使用height:100vh样式2.获取位置要在app.json中标明权限3.先使用...
QQ小程序支付 Java后端 同学折腾QQ小程序的支付折腾了好几天,没有完成统一下单,因为我做过微信和支付...
前言: 在实际项目开发中我们经常会遇到账号统一的问题,如何在不同端或者是不同的登录方式下保证同一个...
一、前言: 我发现很多的同学都在抱怨说微信小程序的picker的mode = selector/mode = multiSelector 无...
前言: 之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能,但是...