What we want to achieve
Is it possible to add two conditions to allowd-minutes
in Vuetify?
I have already added a condition to not show the time before now, but I would like to add another condition, I would like to be able to select m minutes only every 15 minutes. Is there a good solution?
Code
<v-col align-self="center" cols="3"> <v-menu ref="menu" v-model="timePickerMenuStart" :close-on-content-click="false" :nudge-right="40" transition="scale-transition" offset-y max-width="290px" min-width="290px" > <template #activator="{ on, attrs }"> <v-text-field v-model="timePickerStart" label="" prepend-icon="mdi-clock-time-four-outline" readonly v-bind="attrs" v-on="on" /> </template> <v-time-picker v-if="timePickerMenuStart" v-model="timePickerStart" full-width format="24hr" :allowed-hours="timePickerStartHours" :allowed-minutes="timePickerStartMinutes" @change="startTimeSave(timePickerStart)" @click:hour="getHoursStart" /> </v-menu> </v-col>
data () { return { datevVlue: moment().format('yyyy-MM-DD'), dateMenu: false, date: (new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000)).toISOString().substr(0, 10), modal: false, inputMenu: false, timeValue: '', timePickerMenuStart: false, timePickerMenuEnd: false, timePickerStart: null, timePickerEnd: null, dialog: false, getStartTime: null, getEndtime: null } }, timePickerStartHours (value) { const today = new Date().toISOString().substr(0, 10) if (this.date === today) { return value >= new Date().getHours() } else { return true } }, getHoursStart (value) { this.getStartTime = value }, timePickerStartMinutes (value) { const todayHours = new Date().getHours() if (todayHours === this.getStartTime) { return value >= new Date().getMinutes() } else { return true } },
What we tried
ãģI put the value currently being returned into a variable and divided by 15, but two conditions
Advertisement
Answer
If I understood you correctly try like in following snippet: (you can add second condition to first one)
new Vue({ el: '#app', vuetify: new Vuetify(), data () { return { datevVlue: moment().format('yyyy-MM-DD'), dateMenu: false, date: (new Date(Date.now() - (new Date()).getTimezoneOffset() * 60000)).toISOString().substr(0, 10), modal: false, inputMenu: false, timeValue: '', timePickerMenuStart: false, timePickerMenuEnd: false, timePickerStart: null, timePickerEnd: null, dialog: false, getStartTime: null, getEndtime: null } }, methods: { timePickerStartHours (value) { const today = new Date().toISOString().substr(0, 10) if (this.date === today) { return value >= new Date().getHours() } else { return true } }, getHoursStart (value) { this.getStartTime = value }, // đ method for time interval timeInterval(time) { return time % 15 === 0 ? true : false }, timePickerStartMinutes (value) { const todayHours = new Date().getHours() if (todayHours === this.getStartTime) { // đ call method for second condition if(value >= new Date().getMinutes()) return this.timeInterval(value) return false } else { return this.timeInterval(value) // đ call method for second condition } }, startTimeSave(t) {console.log(t)} } })
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet"> <link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet"> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <div id="app"> <v-app> <v-main> <v-container> <v-col align-self="center" cols="3"> <v-menu ref="menu" v-model="timePickerMenuStart" :close-on-content-click="false" :nudge-right="40" transition="scale-transition" offset-y max-width="290px" min-width="290px" > <template #activator="{ on, attrs }"> <v-text-field v-model="timePickerStart" label="" prepend-icon="mdi-clock-time-four-outline" readonly v-bind="attrs" v-on="on" /> </template> <v-time-picker v-if="timePickerMenuStart" v-model="timePickerStart" full-width format="24hr" :allowed-hours="timePickerStartHours" :allowed-minutes="timePickerStartMinutes" @change="startTimeSave(timePickerStart)" @click:hour="getHoursStart" /> </v-menu> </v-col> </v-container> </v-main> </v-app> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script> <script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>