You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vuetify Vue.js中如何实现单次选择日期时间(DateTimePicker)

Vuetify 单次完成日期时间选择解决方案

我们可以通过两种方式实现单次点击完成日期+时间的选择,无需分两次操作:

一、官方组件组合(无额外依赖)

把v-date-picker和v-time-picker嵌入同一个v-menu弹窗,用户点击输入框即可打开包含两者的面板,一次弹窗完成日期和时间选择。示例代码:

<template>
  <v-menu
    v-model="isMenuOpen"
    :close-on-content-click="false"
    transition="scale-transition"
    offset-y
    min-width="auto"
  >
    <template v-slot:activator="{ props }">
      <v-text-field
        v-model="displayDatetime"
        label="选择日期时间"
        variant="underlined"
        readonly
        v-bind="props"
        class="mx-2"
      />
    </template>
    <v-card>
      <v-date-picker
        v-model="selectedDate"
        locale="zh-CN"
      />
      <v-time-picker
        v-model="selectedTime"
        full-width
      />
      <v-card-actions class="justify-end">
        <v-btn text @click="isMenuOpen = false">取消</v-btn>
        <v-btn text @click="confirmSelection">确认</v-btn>
      </v-card-actions>
    </v-card>
  </v-menu>
</template>

<script setup>
import { ref, computed } from 'vue'

const isMenuOpen = ref(false)
const selectedDate = ref('')
const selectedTime = ref('')
const datetime = ref(new Date())

// 格式化显示的日期时间文本
const displayDatetime = computed({
  get() {
    return datetime.value ? new Date(datetime.value).toLocaleString('zh-CN') : ''
  },
  set() {} // 只读输入框,无需处理设置逻辑
})

const confirmSelection = () => {
  if (selectedDate.value && selectedTime.value) {
    datetime.value = new Date(`${selectedDate.value}T${selectedTime.value}`)
  }
  isMenuOpen.value = false
}
</script>

二、使用Vuetify封装的第三方组件

可以直接使用vuetify-datetime-picker这类第三方包,它是基于Vuetify封装好的日期时间选择器,开箱即用支持单次弹窗完成选择,无需手动组合组件。

不推荐继续使用原生datetime-local

原生的type="datetime-local"输入框存在样式不统一、移动端兼容性差等问题,和Vuetify的设计体系适配不佳,建议替换为上述两种方案。

内容的提问来源于stack exchange,提问作者NPatel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:31:16