1.新建pickertime.js
function withData(param) {
return param < 10 ? '0' + param : '' + param;
}
function getLoopArray(start, end,title) {
var start = start || 0;
var end = end || 1;
var array = [];
for (var i = start; i <= end; i++) {
array.push(withData(i)+title);
}
return array;
}
function getMonthDay(year, month,title) {
var flag = year % 400 == 0 || (year % 4 == 0 && year % 100 != 0), array = null;
switch (month) {
case '01月':
case '03月':
case '05月':
case '07月':
case '08月':
case '10月':
case '12月':
array = getLoopArray(1, 31,title)
break;
case '04月':
case '06月':
case '09月':
case '11月':
array = getLoopArray(1, 30,title)
break;
case '02月':
array = flag ? getLoopArray(1, 29,title) : getLoopArray(1, 28,title)
break;
default:
array = '月份格式不正确,请重新输入!'
console.log(month);
console.log(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+"分"];
}
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
}
2.wxml内容
<picker mode="multiSelector" value="{{dateTime1}}" bindchange="changeDateTime1" bindcolumnchange="changeDateTimeColumn1" range="{{dateTimeArray1}}">
<view class="picker ">
<van-icon name="arrow" size="32rpx" color="#888888" />
<input wx:if="{{time1}}" placeholder="请选择开始时间" disabled="true" value="{{timedata1}}" class="textomit" style="float: left;font-weight: 400;font-family: PingFang SC;" />
<input wx:else="" placeholder="请选择开始时间" disabled="true" value="" class="textomit" style="float: left;font-weight: 400;font-family: PingFang SC;" />
<input type="text" style="display: none;" name="startTime" value="{{date}}" />
</view>
</picker>
js内容
var dateTimePicker = require('../../components/pickerTime/pickerTime');
data: {
dateTimeArray1: null,
dateTime1: null,
startYear: null,
endYear: null,
},
// 选择日期开始时间
changeDateTime1(e) {
var arr = this.data.dateTime1,
dateArr = this.data.dateTimeArray1;
this.setData({
dateTime1: e.detail.value,
time1: true
});
var timedata1 = (dateArr[0][arr[0]]).slice(0, 4) + "-" + (dateArr[1][arr[1]]).slice(0, 2) + "-" + (dateArr[2][arr[2]]).slice(0, 2) + " " + (dateArr[3][arr[3]]).slice(0, 2) + ":" + (dateArr[4][arr[4]]).slice(0, 2);
this.setData({
timedata1: timedata1,
});
},
// 选择日期开始时间
changeDateTimeColumn1(e) {
var arr = this.data.dateTime1,
dateArr = this.data.dateTimeArray1;
var m = dateArr[1][arr[1]];
console.log(dateArr);
arr[e.detail.column] = e.detail.value;
dateArr[2] = dateTimePicker.getMonthDay(dateArr[0][arr[0]], m, "日");
this.setData({
dateTimeArray1: dateArr,
dateTime1: arr
});
var timedata1 = (dateArr[0][arr[0]]).slice(0, 4) + "-" + (dateArr[1][arr[1]]).slice(0, 2) + "-" + (dateArr[2][arr[2]]).slice(0, 2) + " " + (dateArr[3][arr[3]]).slice(0, 2) + ":" + (dateArr[4][arr[4]]).slice(0, 2);
this.setData({
timedata1: timedata1,
});
},
onLoad: function (options) {
let that = this;
// 获取完整的年月日 时分,以及默认显示的数组
var obj1 = dateTimePicker.dateTimePicker(this.data.startYear, this.data.endYear);
console.log(obj1);
this.setData({
dateTimeArray1: obj1.dateTimeArray,
dateTime1: obj1.dateTime,
});
},