momentjs實(shí)現(xiàn)DatePicker時(shí)間禁用的項(xiàng)目實(shí)踐
momentjs是一個(gè)處理時(shí)間的js庫,簡(jiǎn)潔易用。
淺析一下, momentjs 在vue中對(duì)DatePicker時(shí)間組件的禁用實(shí)踐。
一,npm下載
npm install moment --save
二,particles.json中
"dependencies": { "axios": "^0.18.0", "iview": "^3.4.0", "moment": "^2.24.0", "vue": "^2.5.10", "vue-i18n": "^7.8.0", "vue-router": "^3.0.1", "vuex": "^3.0.1" },
三,引入使用
1.main.js中引入
import 'moment/locale/zh-cn' moment.locale('zh-cn'); Vue.prototype.$moment = moment;
2.頁面或組件引入使用
import moment from "moment"
3.方法使用
moment().format('YYYY-MM-DD'); //獲取格式
moment().startOf('month') //獲取當(dāng)月第一天 moment().endOf('month') //獲取當(dāng)月最后一天
moment().subtract(7, 'days') //獲取前7天 moment().subtract(4,'month') //獲取前4個(gè)月
更多方法參考momentjs官網(wǎng):momentjs
4.應(yīng)用實(shí)例
a,日期禁用
pickerStart: { disabledDate(time) { let startDate; let endDate=moment().subtract(4, "days").format("YYYY-MM-DD"); if(today<4){ startDate=moment().subtract(5,'month').endOf('month').format('YYYY-MM-DD'); } if(today>4||today==4){ startDate=moment().subtract(4,'month').endOf('month').format('YYYY-MM-DD'); } return ( time && time.valueOf() < new Date(startDate).getTime() || time.valueOf() > new Date(endDate).getTime() ); } }, pickerEnd: { disabledDate(time) { let startDate; let endDate=moment().subtract(4, "days").format("YYYY-MM-DD"); if(today<4){ startDate=moment().subtract(5,'month').endOf('month').format('YYYY-MM-DD'); } if(today>4||today==4){ startDate=moment().subtract(4,'month').endOf('month').format('YYYY-MM-DD'); } return ( time && time.valueOf() < new Date(startDate).getTime() || time.valueOf() > new Date(endDate).getTime() ); }, },
b,月份禁用
pickerStart: { disabledDate(time) { let startMonth; let endMonth; if(today<4){ startMonth=moment().subtract(5, "month").format("YYYY-MM"); endMonth=moment().subtract(2, "month").format("YYYY-MM"); } if(today>4||today==4){ startMonth=moment().subtract(4, "month").format("YYYY-MM"); endMonth=moment().subtract(1, "month").format("YYYY-MM"); } return ( time && time.valueOf() < new Date(startMonth).getTime() || time.valueOf() > new Date(endMonth).getTime() ); } }, pickerEnd: { disabledDate(time) { let startMonth; let endMonth; if(today<4){ startMonth=moment().subtract(5, "month").format("YYYY-MM"); endMonth=moment().subtract(2, "month").format("YYYY-MM"); } if(today>4||today==4){ startMonth=moment().subtract(4, "month").format("YYYY-MM"); endMonth=moment().subtract(1, "month").format("YYYY-MM"); } return ( time && time.valueOf() < new Date(startMonth).getTime() || time.valueOf() > new Date(endMonth).getTime() ); }, },
四,頁面效果
a,禁用月份
b,禁用日期
五,完整代碼
1,頁面查詢組件引用
a.引入
import DateSearch from "_c/date-search"; components: {DateSearch},
b.渲染
<date-search ref="dateSearch"> <span class="search-label">查詢時(shí)間</span> </date-search>
c.獲取時(shí)間
let {S_createTime_GTOE, S_createTime_LTOE} = this.$refs.dateSearch.getDateSearch(); this.queryParam.endTime =S_createTime_LTOE; this.queryParam.startTime=S_createTime_GTOE;
2.時(shí)間組件
a.月份組件
<template> <span> <slot /> <FormItem> <DatePicker v-model="condition.S_createTime_GTOE" confirm clearable placement="bottom-end" class="search-input" :type="type" :format="format" :options="pickerStart" transfer @on-change="onStartDateChange" ></DatePicker> </FormItem> <span class="search-label">至</span> <FormItem> <DatePicker v-model="condition.S_createTime_LTOE" confirm clearable placement="bottom-end" :type="type" :format="format" class="search-input" :options="pickerEnd" transfer @on-change="onEndDateChange" ></DatePicker> </FormItem> </span> </template> <script> import { convertUTCTimeToMonth } from "@/libs/tools"; import moment from "moment" export default { props: { format: { type: String, default: "yyyy-MM", }, type: { type: String, default: "month", }, defaultTime: { type: Boolean, default: true, }, searchField: { type: String, default: "createTime", }, }, data() { const today= moment().format('DD'); return { condition: { S_createTime_GTOE: "", S_createTime_LTOE: "", }, pickerStart: { disabledDate(time) { let startMonth; let endMonth; if(today<4){ startMonth=moment().subtract(5, "month").format("YYYY-MM"); endMonth=moment().subtract(2, "month").format("YYYY-MM"); } if(today>4||today==4){ startMonth=moment().subtract(4, "month").format("YYYY-MM"); endMonth=moment().subtract(1, "month").format("YYYY-MM"); } return ( time && time.valueOf() < new Date(startMonth).getTime() || time.valueOf() > new Date(endMonth).getTime() ); } }, pickerEnd: { disabledDate(time) { let startMonth; let endMonth; if(today<4){ startMonth=moment().subtract(5, "month").format("YYYY-MM"); endMonth=moment().subtract(2, "month").format("YYYY-MM"); } if(today>4||today==4){ startMonth=moment().subtract(4, "month").format("YYYY-MM"); endMonth=moment().subtract(1, "month").format("YYYY-MM"); } return ( time && time.valueOf() < new Date(startMonth).getTime() || time.valueOf() > new Date(endMonth).getTime() ); }, }, }; }, methods: { getDateSearch() { const defaultTime = this.defaultTime; let valid = true; let { S_createTime_GTOE, S_createTime_LTOE } = this.condition; if (S_createTime_GTOE && typeof S_createTime_GTOE === "object") { S_createTime_GTOE = convertUTCTimeToMonth(S_createTime_GTOE, true); } if (S_createTime_LTOE && typeof S_createTime_LTOE === "object") { S_createTime_LTOE = convertUTCTimeToMonth(S_createTime_LTOE, true); } if (defaultTime) { if (!S_createTime_GTOE) { this.$Message.warning("查詢起始時(shí)間不能為空"); valid = false; } else if (!S_createTime_LTOE) { this.$Message.warning("查詢結(jié)束時(shí)間不能為空"); valid = false; } else if (S_createTime_LTOE < S_createTime_GTOE) { this.$Message.warning("結(jié)束時(shí)間不能早于起始時(shí)間"); valid = false; } } else { if (S_createTime_LTOE && S_createTime_LTOE < S_createTime_GTOE) { this.$Message.warning("結(jié)束時(shí)間不能早于起始時(shí)間"); valid = false; } } return { valid, [`S_${this.searchField}_GTOE`]: S_createTime_GTOE, [`S_${this.searchField}_LTOE`]: S_createTime_LTOE, }; }, onStartDateChange(date) { this.condition.S_createTime_GTOE = date; }, onEndDateChange(date) { this.condition.S_createTime_LTOE = date; }, getDefaultTime() { let startMonth; let endMonth; let today= moment().format('DD'); //30 if(today<4){ startMonth=moment().subtract(4, "month").format("YYYY-MM"); endMonth=moment().subtract(2, "month").format("YYYY-MM"); } if(today>4||today==4){ startMonth=moment().subtract(3, "month").format("YYYY-MM"); endMonth=moment().subtract(1, "month").format("YYYY-MM"); } return [startMonth,endMonth] }, resetDateSearch(){ if(this.defaultTime){ this.condition.S_createTime_GTOE = this.getDefaultTime()[0], this.condition.S_createTime_LTOE = this.getDefaultTime()[1] }else{ this.condition.S_createTime_GTOE = "" this.condition.S_createTime_LTOE = "" } } }, created() { this.resetDateSearch(); }, }; </script>
convertUTCTimeToMonth 方法
// 時(shí)間到月(年/月) export const convertUTCTimeToMonth = (UTCDateString) => { if (!UTCDateString) { return '-' } function formatFunc (str) { return str > 9 ? str : '0' + str } let date2 = new Date(UTCDateString) let year = date2.getFullYear() let mon = formatFunc(date2.getMonth() + 1) let day = formatFunc(date2.getDate()) let hour = date2.getHours() hour = formatFunc(hour) let min = formatFunc(date2.getMinutes()) let second = formatFunc(date2.getSeconds()) let dateStr = year + '-' + mon return dateStr }
b.日期組件
<template> <span> <slot /> <FormItem> <DatePicker v-model="condition.S_createTime_GTOE" confirm clearable placement="bottom-end" class="search-input" :type="type" :format="format" :options="pickerStart" transfer @on-change="onStartDateChange" ></DatePicker> </FormItem> <span class="search-label">至</span> <FormItem> <DatePicker v-model="condition.S_createTime_LTOE" confirm clearable placement="bottom-end" :type="type" :format="format" class="search-input" :options="pickerEnd" transfer @on-change="onEndDateChange" ></DatePicker> </FormItem> </span> </template> <script> import { convertUTCTimeToDate } from "@/libs/tools"; import moment from "moment" export default { props: { format: { type: String, default: "yyyy-MM-dd", }, type: { type: String, default: "date", }, defaultTime: { type: Boolean, default: true, }, searchField: { type: String, default: "createTime", }, }, data() { const today= moment().format('DD'); return { condition: { S_createTime_GTOE: "", S_createTime_LTOE: "", }, pickerStart: { disabledDate(time) { let startDate; let endDate=moment().subtract(4, "days").format("YYYY-MM-DD"); if(today<4){ startDate=moment().subtract(5,'month').endOf('month').format('YYYY-MM-DD'); } if(today>4||today==4){ startDate=moment().subtract(4,'month').endOf('month').format('YYYY-MM-DD'); } return ( time && time.valueOf() < new Date(startDate).getTime() || time.valueOf() > new Date(endDate).getTime() ); } }, pickerEnd: { disabledDate(time) { let startDate; let endDate=moment().subtract(4, "days").format("YYYY-MM-DD"); if(today<4){ startDate=moment().subtract(5,'month').endOf('month').format('YYYY-MM-DD'); } if(today>4||today==4){ startDate=moment().subtract(4,'month').endOf('month').format('YYYY-MM-DD'); } return ( time && time.valueOf() < new Date(startDate).getTime() || time.valueOf() > new Date(endDate).getTime() ); }, }, }; }, methods: { getDateSearch() { const defaultTime = this.defaultTime; let valid = true; let { S_createTime_GTOE, S_createTime_LTOE } = this.condition; if (S_createTime_GTOE && typeof S_createTime_GTOE === "object") { S_createTime_GTOE = convertUTCTimeToDate(S_createTime_GTOE, true); } if (S_createTime_LTOE && typeof S_createTime_LTOE === "object") { S_createTime_LTOE = convertUTCTimeToDate(S_createTime_LTOE, true); } if (defaultTime) { if (!S_createTime_GTOE) { this.$Message.warning("查詢起始時(shí)間不能為空"); valid = false; } else if (!S_createTime_LTOE) { this.$Message.warning("查詢結(jié)束時(shí)間不能為空"); valid = false; } else if (S_createTime_LTOE < S_createTime_GTOE) { this.$Message.warning("結(jié)束時(shí)間不能早于起始時(shí)間"); valid = false; } } else { if (S_createTime_LTOE && S_createTime_LTOE < S_createTime_GTOE) { this.$Message.warning("結(jié)束時(shí)間不能早于起始時(shí)間"); valid = false; } } return { valid, [`S_${this.searchField}_GTOE`]: S_createTime_GTOE.split(" ")[0], [`S_${this.searchField}_LTOE`]: S_createTime_LTOE.split(" ")[0], }; }, onStartDateChange(date) { this.condition.S_createTime_GTOE = date; }, onEndDateChange(date) { this.condition.S_createTime_LTOE = date; }, getDefaultTime() { let startDate; let today= moment().format('DD'); //30 let endDate=moment().subtract(4, "days").format("YYYY-MM-DD"); if(today<4){ startDate=moment().subtract(4,'month').startOf('month').format('YYYY-MM-DD'); } if(today>4||today==4){ startDate=moment().subtract(3,'month').startOf('month').format('YYYY-MM-DD'); } return [startDate,endDate] }, resetDateSearch(){ if(this.defaultTime){ this.condition.S_createTime_GTOE = this.getDefaultTime()[0], this.condition.S_createTime_LTOE = this.getDefaultTime()[1] }else{ this.condition.S_createTime_GTOE = "" this.condition.S_createTime_LTOE = "" } } }, created() { this.resetDateSearch(); }, }; </script>
convertUTCTimeToDate
// 時(shí)間到日期(年/月/日) export const convertUTCTimeToDate = (UTCDateString) => { if (!UTCDateString) { return '-' } function formatFunc (str) { return str > 9 ? str : '0' + str } let date2 = new Date(UTCDateString) let year = date2.getFullYear() let mon = formatFunc(date2.getMonth() + 1) let day = formatFunc(date2.getDate()) let hour = date2.getHours() hour = formatFunc(hour) let min = formatFunc(date2.getMinutes()) let second = formatFunc(date2.getSeconds()) let dateStr = year + '-' + mon + '-' + day return dateStr }
到此這篇關(guān)于momentjs實(shí)現(xiàn)DatePicker時(shí)間禁用的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)momentjs DatePicker時(shí)間禁用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何解決Webview和H5緩存問題確保每次加載最新版本的資源詳解
WebView在加載H5頁面時(shí),可能會(huì)因?yàn)榫彺鏅C(jī)制導(dǎo)致用戶看到舊版本的頁面,這篇文章主要介紹了如何解決Webview和H5緩存問題確保每次加載最新版本的資源的相關(guān)資料,需要的朋友可以參考下2025-02-02對(duì)JavaScript的eval()中使用函數(shù)的進(jìn)一步討論
《JavaScript語言精髓與編程實(shí)踐》的讀者I22141提出了一問題:為什么下面這段代碼在JScript 和SpiderMonkey中表現(xiàn)不一樣:2008-07-07關(guān)于RxJS Subject的學(xué)習(xí)筆記
這篇文章主要介紹了關(guān)于RxJS Subject的學(xué)習(xí)筆記,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12Knockoutjs 學(xué)習(xí)系列(一)ko初體驗(yàn)
本篇主要簡(jiǎn)單介紹了knockoutjs中最重要的概念:可觀察對(duì)象(數(shù)組)。非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友快來圍觀吧2016-06-06js通過audioContext實(shí)現(xiàn)3D音效
這篇文章主要為大家詳細(xì)介紹了js通過audioContext實(shí)現(xiàn)3D音效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04淺談?lì)愃朴?function(){}).call()的js語句
這篇文章主要介紹了淺談?lì)愃朴?function(){}).call()的js語句,的相關(guān)資料,需要的朋友可以參考下2015-03-03