小程序日期时间选择组件无bug版,不服来用

2024-05-10 09:18

本文主要是介绍小程序日期时间选择组件无bug版,不服来用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该组件达到一个目的,就是日期和时间共同选择,时间精确到分钟。

<picker mode="multiSelector" bindchange="bindMultiPickerChangedb" bindcolumnchange="bindMultiPickerColumnChangedb" range="{{dateTimeArray1}}" value="{{dateTime1}}">

       <view class="weui-label fontlittle">取车时间</view>

      <view class="weui-label fontcolor">{{dateTimeArray1[1][dateTime1[1]]}}-{{dateTimeArray1[2][dateTime1[2]]}}</view>

      <view class="weui-label fontlittle">{{dateTimeArray1[3][dateTime1[3]]}}:{{dateTimeArray1[4][dateTime1[4]]}}</view>

</picker>

js代码:

const date = new Date();

Page({

      data:{

             "dateTimeArray1": [],

             "dateTime1":null,

             "dateTimeArray2": [],

             "dateTime2": null,

             "begintime":"",

             "endtime":"",

      },

     onLoad: function (options) {

            var that = this;

           if (wx.getStorageSync('begintime')) {

                     that.setData({

                            begintime: wx.getStorageSync('begintime')

                     });

           }else{

                     that.setData({

                            begintime: date.getFullYear() + '-' + (date.getMonth()) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes() + ':00'

                     });

           }

           var obj1 = app.dateTimePicker.dateTimePicker(date.getFullYear(), date.getFullYear() + 2,that.data.begintime);

           that.setData({

                   dateTimeArray1: obj1.dateTimeArray,

                   dateTime1: obj1.dateTime,

           });

    },

    bindMultiPickerChangedb:function(e){

           var that = this;

           that.setData({ dateTime1: e.detail.value });

    },

    bindMultiPickerColumnChangedb:function(e){

           var that = this;

           var arr = that.data.dateTime1;

           if(e.detail.column==1){

                    var rm = e.detail.value + 1;

                    var maxday = 31;

                    if(rm == 1||rm == 3||rm == 5||rm == 7||rm == 8||rm == 10||rm == 12){

                             maxday = 31;

                    }

                    if (rm == 4 || rm == 6 || rm == 9 || rm == 11) {

                            maxday = 30;

                    }

                    if (rm == 2){

                            maxday = (arr[0] % 400 == 0 || (arr[0] % 4 == 0 && arr[0] % 100 != 0))?29:28;

                    }

                    var array = [];

                    for (var i = 1; i <= maxday; i++) {

                          array.push(i < 10 ? '0' + i : '' + i);

                    }

                    that.data.dateTimeArray1[2] = array;

                    that.setData({

                             dateTimeArray1: that.data.dateTimeArray1,

                    });

           }

           var dateArr = that.data.dateTimeArray1;

           arr[e.detail.column] = e.detail.value;

           that.setData({

                     //dateTimeArray1: dateArr,

                    dateTime1: arr

            });

            var year = that.data.dateTimeArray1[0][that.data.dateTime1[0]];

            var month = that.data.dateTimeArray1[1][that.data.dateTime1[1]];

            var day = that.data.dateTimeArray1[2][that.data.dateTime1[2]];

            var hour = that.data.dateTimeArray1[3][that.data.dateTime1[3]];

            var minute = that.data.dateTimeArray1[4][that.data.dateTime1[4]];

            that.setData({

                     begintime: year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':00'

            });

           wx.setStorageSync('begintime', that.data.begintime);

   }

})

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 = [], month = [],dateTimeArray = [[], [], [], [], [], []];

var dateTime = [], month = [],dateTimeArray = [[], [], [], [], []];

var start = startYear || 1978;

var end = endYear || 2100;

// 默认开始显示数据

var defaultDate = date ? [...date.split(' ')[0].split('-'), ...date.split(' ')[1].split(':')] : getNewDateArry();

// 处理联动列表数据

month[1] = getMonthDay(defaultDate[0], 1);

month[2] = getMonthDay(defaultDate[0], 2);

month[3] = getMonthDay(defaultDate[0], 3);

month[4] = getMonthDay(defaultDate[0], 4);

month[5] = getMonthDay(defaultDate[0], 5);

/*年月日 时分秒*/

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]));

});

//console.log(dateTimeArray);

return {

dateTimeArray: dateTimeArray,

dateTime: dateTime

}

}

module.exports = {

dateTimePicker: dateTimePicker,

getMonthDay: getMonthDay

}

 

 

这篇关于小程序日期时间选择组件无bug版,不服来用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976024

相关文章

Python的Darts库实现时间序列预测

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解... 目录目录一、什么是 Darts?二、安装与基本配置安装 Darts导入基础模块三、时间序列数据结构与

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段