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


Posted in Javascript onFebruary 01, 2018

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

效果图

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

实现原理

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

WXML

<view class="tui-picker-content">
 <view class="tui-picker-name">时间选择器(选择时分)</view>
 <picker mode="time" value="{{time}}" start="09:00" end="17:30" bindchange="changeTime">
 <view class="tui-picker-detail">
  午饭时间: {{time}} 
 </view>
 </picker>
</view>

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

<view class="tui-picker-content">
 <view class="tui-picker-name">日期时间选择器(精确到秒)</view>
 <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]]}}
 </view>
 </picker>
</view>
<view class="tui-picker-content">
 <view class="tui-picker-name">日期时间选择器(精确到分)</view>
 <picker mode="multiSelector" value="{{dateTime1}}" bindchange="changeDateTime1" bindcolumnchange="changeDateTimeColumn1" range="{{dateTimeArray1}}">
 <view class="tui-picker-detail">
  选择日期时间: {{dateTimeArray1[0][dateTime1[0]]}}-{{dateTimeArray1[1][dateTime1[1]]}}-{{dateTimeArray1[2][dateTime1[2]]}} {{dateTimeArray1[3][dateTime1[3]]}}:{{dateTimeArray1[4][dateTime1[4]]}}
 </view>
 </picker>
</view>

WXSS

@import "../picker/picker.wxss";

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

JS

var dateTimePicker = require('../../utils/dateTimePicker.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的引入

function withData(param){
 return param < 10 ? '0' + param : '' + param;
}
function getLoopArray(start,end){
 var start = start || 0;
 var end = end || 1;
 var array = [];
 for (var i = start; i <= end; i++) {
 array.push(withData(i));
 }
 return array;
}
function getMonthDay(year,month){
 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)
  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下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery的$getjson调用并获取远程的JSON字符串问题
Dec 10 Javascript
ajax的hide隐藏问题解决方法
Dec 11 Javascript
cookie.js 加载顺序问题怎么才有效
Jul 31 Javascript
jquery解决客户端跨域访问问题
Jan 06 Javascript
JavaScript学习笔记之数组随机排序
Mar 23 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
vue2.0实现移动端的输入框实时检索更新列表功能
May 08 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
Nov 21 Javascript
layui 富文本赋值,取值,取纯文本值的实例
Sep 18 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 Javascript
NW.js 简介与使用方法
Feb 01 #Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 #Javascript
Vue组件之自定义事件的功能图解
Feb 01 #Javascript
微信小程序三级联动选择器使用方法
May 19 #Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 #jQuery
使用JS模拟锚点跳转的实例
Feb 01 #Javascript
微信小程序实现图片预览功能
Jan 31 #Javascript
You might like
德生1994机评
2021/03/02 无线电
php 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP封装的数据库模型Model类完整示例【基于PDO】
2019/03/14 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
Javascript中的return作用及javascript return关键字用法详解
2015/11/05 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
微信小程序button组件使用详解
2018/01/31 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
vue使用Google地图的实现示例代码
2018/12/19 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
Openlayers实现地图全屏显示
2020/09/28 Javascript
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
shell的种类有哪些
2015/04/15 面试题
请介绍一下WSDL的文档结构
2013/03/17 面试题
YII2 全局异常处理深入讲解
2021/03/24 PHP
合同专员岗位职责
2013/12/18 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
国贸专业求职信
2014/06/28 职场文书
工程安全生产协议书
2014/11/21 职场文书
公司出差管理制度范本
2015/08/05 职场文书
七夕情人节问候语
2015/11/11 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
vue特效之翻牌动画
2022/04/20 Vue.js
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers