使用Vue編寫一個日期選擇器
在 Vue 中實現(xiàn)日期選擇器的方法有很多,下面提供一個簡單的實現(xiàn)方法。
首先,在需要使用日期選擇器的組件中引用 Vue 和 date-fns 庫,date-fns 庫是一個輕量級的 JavaScript 時間日期工具庫,可以方便地處理日期的格式化和計算。
import Vue from 'vue' import { format } from 'date-fns' export default { data () { return { selectedDate: null } }, methods: { formatDate (date) { return format(date, 'yyyy-MM-dd') }, selectDate (date) { this.selectedDate = date } } }
在模板中使用第三方日期選擇器組件,這里使用了 Element UI 庫中的 DatePicker 組件。同時給 DatePicker 組件綁定 onChange 事件,將選中的日期保存到 data 中的 selectedDate 變量中。
<template> <div> <el-date-picker v-model="selectedDate" type="date" format="yyyy-MM-dd" @change="selectDate(selectedDate)"> </el-date-picker> </div> </template>
在 methods 中定義 formatDate 方法來格式化日期,并定義 selectDate 方法來處理選擇日期的操作。
import Vue from 'vue' import { format } from 'date-fns' export default { data () { return { selectedDate: null } }, methods: { formatDate (date) { return format(date, 'yyyy-MM-dd') }, selectDate (date) { this.selectedDate = date } } }
這樣,一個簡單的 Vue 日期選擇器就完成了,可以根據(jù)實際需要進行擴展和修改。
方法補充
除了上文的方法,小編還為大家整理了其他vue實現(xiàn)日期選擇器的方法,下面是示例代碼,希望對大家有所幫助
完整代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue 日期選擇器</title> <style> .datepicker { position: relative; display: inline-block; } .datepicker input { width: 120px; padding: 4px; border: 1px solid #ccc; outline: none; cursor: pointer; } .datepicker-panel { position: absolute; top: 30px; left: 0; z-index: 1000; border: 1px solid #ccc; background-color: #fff; box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.15); } .datepicker-content { padding: 10px; } .datepicker-header { margin-bottom: 10px; text-align: center; } .datepicker-header span { margin: 0 10px; cursor: pointer; } .datepicker-body { display: flex; flex-wrap: wrap; justify-content: space-between; } .datepicker-row { display: flex; } .datepicker-cell { width: calc(100% / 7); text-align: center; cursor: pointer; } .datepicker-cell.filled:hover { background-color: #ddd; } </style> </head> <body> <div id="app"> <date-picker v-model="date"></date-picker> </div> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <script> Vue.component('date-picker', { template: ` <div class="datepicker"> <input type="text" v-model="value" @click="showPicker"> <div class="datepicker-panel" v-show="visible"> <div class="datepicker-content"> <div class="datepicker-header"> <span class="datepicker-prev-year" @click="prevYear"><<</span> <span class="datepicker-prev-month" @click="prevMonth"><</span> <span class="datepicker-current-month">{{ currentMonth }}</span> <span class="datepicker-next-month" @click="nextMonth">></span> <span class="datepicker-next-year" @click="nextYear">>></span> </div> <div class="datepicker-body"> <div class="datepicker-row" v-for="week in weeks"> <span class="datepicker-cell" v-for="day in week" :class="{'filled': day !== ''}" @click="selectDate(day)"> {{ day }} </span> </div> </div> </div> </div> </div> `, props: { value: { type: String, default: '' } }, data() { return { visible: false, year: 0, month: 0, day: 0 } }, computed: { currentMonth() { return `${this.year} 年 ${this.month} 月` }, weeks() { return this.getWeeks(this.year, this.month) } }, methods: { showPicker() { this.visible = true const date = new Date() this.year = date.getFullYear() this.month = date.getMonth() + 1 this.day = date.getDate() }, prevYear() { this.year-- }, nextYear() { this.year++ }, prevMonth() { if (this.month === 1) { this.year-- this.month = 12 } else { this.month-- } }, nextMonth() { if (this.month === 12) { this.year++ this.month = 1 } else { this.month++ } }, getWeeks(year, month) { const weeks = [] const firstDay = new Date(year, month - 1, 1).getDay() const lastDay = new Date(year, month, 0).getDate() let week = [] for (let i = 0; i < firstDay; i++) { week.push('') } for (let i = 1; i <= lastDay; i++) { week.push(i) if ((firstDay + i) % 7 === 0) { weeks.push(week) week = [] } } if (week.length > 0) { for (let i = 0; i < 7 - week.length; i++) { week.push('') } weeks.push(week) } return weeks }, selectDate(day) { if (day) { this.value = `${this.year}-${this.month}-${day}` this.visible = false } } } }) new Vue({ el: '#app', data: { date: '' } }) </script> </body> </html>
到此這篇關于使用Vue編寫一個日期選擇器的文章就介紹到這了,更多相關Vue日期選擇器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決element-ui里的下拉多選框 el-select 時,默認值不可刪除問題
這篇文章主要介紹了解決element-ui里的下拉多選框 el-select 時,默認值不可刪除問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08vue-router路由跳轉(zhuǎn)問題 replace
這篇文章主要介紹了vue-router路由跳轉(zhuǎn)問題 replace,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09vue + element ui實現(xiàn)播放器功能的實例代碼
這篇文章主要介紹了vue + element ui實現(xiàn)播放器功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04Vue使用vue-area-linkage實現(xiàn)地址三級聯(lián)動效果的示例
很多時候我們需要使用地址三級聯(lián)動,即省市區(qū)三級聯(lián)動,這篇文章主要介紹了Vue使用vue-area-linkage實現(xiàn)地址三級聯(lián)動效果的示例,感興趣的小伙伴們可以參考一下2018-06-06vue3.0運行npm run dev報錯Cannot find module&
本文主要介紹了vue3.0運行npm run dev報錯Cannot find module node:url,因為使用的node版本是14.15.1低于15.0.0導致,具有一定的參考價值,感興趣的可以了解一下2023-10-10