uniapp實(shí)現(xiàn)日期時(shí)間選擇器
本文實(shí)例為大家分享了uniapp實(shí)現(xiàn)日期時(shí)間選擇器的具體代碼,供大家參考,具體內(nèi)容如下
由于項(xiàng)目需求需要,嘗試過使用Vant組件庫,但是一直出現(xiàn)問題,插件市場(chǎng)的插件又不太符合需求,使用就查了相關(guān)資料,最終搗鼓的效果如下:
首先現(xiàn)在根目錄下創(chuàng)建util文件夾放dateTimePicker.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 = '月份格式不正確,請(qǐng)重新輸入!' } return array; } function getNewDateArry(){ // 當(dāng)前時(shí)間的處理 年月日時(shí)分秒 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) { // 返回默認(rèn)顯示的數(shù)組和聯(lián)動(dòng)數(shù)組的聲明 var dateTime = [], dateTimeArray = [[],[],[],[],[]]; var start = startYear || 1978; var end = endYear || 2100; //處理傳過來的字符串轉(zhuǎn)化為數(shù)組 let dataArr = date.split(" ")[0].split('/') let time = date.split(" ")[1].split(':') // 默認(rèn)開始顯示數(shù)據(jù) 如果把自定義值傳過來的話就使用自定義時(shí)間 否則用當(dāng)前時(shí)間 ...dataArr數(shù)組解構(gòu) var defaultDate = date ? [...dataArr, ...time] : getNewDateArry(); // 處理聯(lián)動(dòng)列表數(shù)據(jù) /*年月日 時(shí)分秒*/ 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數(shù)組 dateTimeArray.forEach((current,index) => //匹配defaultDate[index]值在current數(shù)組中的位置 dateTime.push(current.indexOf(defaultDate[index])) ); return { dateTimeArray: dateTimeArray, dateTime: dateTime } } module.exports = { dateTimePicker: dateTimePicker, getMonthDay: getMonthDay }
template模板
<picker mode="multiSelector" :range="dateTimeArray" v-model="dateTime" @change="change" @columnchange="columnchange"> <view> //disable = "true" 是禁用input 防止點(diǎn)擊彈出鍵盤 <input type="text" disabled="true" v-model="upTower" placeholder="請(qǐng)選擇時(shí)間" placeholder-class="inputPlace" /> </view> </picker>
script部分
//引入事先聲明的類 const dateTimePicker = require('@/util/dateTimePicker.js') export default { data() { return { // 時(shí)間選擇器 dateTimeArray: null, dateTime: null, startYear: 2000, endYear: 2050, }; }, onLoad() { //傳入開始展示年份startYear 結(jié)束展示年份endYear //自定義開始顯示時(shí)間 let arr = '2018/09/01 13:00' let obj = dateTimePicker.dateTimePicker(this.startYear, this.endYear,arr) this.dateTimeArray = obj.dateTimeArray this.dateTime = obj.dateTime }, methods: { //時(shí)間格式化 withData(param){ return param < 10 ? '0' + param : '' + param; }, change(e){ let value = [] e.detail.value.forEach((val,index) => { value.push(this.withData(val)) }) let dateArray = "20" + value[0] + "-" + value[1] + "-" + value[2] + " " + value[3] + ":" + value[4] this.upTower = dateArray }, columnchange(e){ let dateArr = this.dateTimeArray let arr = this.dateTime //滑動(dòng)所在列的數(shù)據(jù)并對(duì)其值進(jìn)行更新 arr[e.detail.column] = e.detail.value //更新展示月份對(duì)應(yīng)的天數(shù)(28 or 29 or 30 or 31) dateArr[2] = dateTimePicker.getMonthDay(dateArr[0][arr[0]], dateArr[1][arr[1]]) //最后把最新的數(shù)值賦值到dateTimeArray this.dateTimeArray = dateArr this.dateTime = arr },
picker屬性中 :range=“dateTimeArray” =》dateTimeArray 二維數(shù)組,長(zhǎng)度表示多少列,數(shù)組的每項(xiàng)表示每列的數(shù)據(jù) 這是多列選擇器展示的重點(diǎn)所在
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
多種方法實(shí)現(xiàn)load加載完成后把圖片一次性顯示出來
如何一個(gè)load 加載完成后把圖片一次性顯示出來,下面有個(gè)不錯(cuò)的方法,希望對(duì)大家有所幫助2014-02-02JavaScript實(shí)現(xiàn)購物車基本功能
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)購物車的基本功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Ajax跨域?qū)崿F(xiàn)代碼(后臺(tái)jsp)
這篇文章主要介紹了Ajax跨域?qū)崿F(xiàn)代碼(后臺(tái)jsp),需要的朋友可以參考下2017-01-01js控制文本框只輸入數(shù)字和小數(shù)點(diǎn)的方法
這篇文章主要介紹了js控制文本框只輸入數(shù)字和小數(shù)點(diǎn)的方法,實(shí)例分析了javascript使用正則表達(dá)式實(shí)現(xiàn)限制數(shù)字和小數(shù)點(diǎn)的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03json數(shù)據(jù)處理及數(shù)據(jù)綁定
本文主要介紹了json數(shù)據(jù)處理及數(shù)據(jù)綁定的相關(guān)知識(shí)。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01JS實(shí)現(xiàn)的新聞列表自動(dòng)滾動(dòng)效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的新聞列表自動(dòng)滾動(dòng)效果,涉及javascript基于時(shí)間函數(shù)的頁面元素屬性動(dòng)態(tài)變換相關(guān)操作技巧,需要的朋友可以參考下2019-01-01