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

如何让Vuetify v-calendar中带v-present的今日日期始终位于周视图中间列

实现v-calendar周视图今日固定在中间列的方案

核心思路

默认周模式按自然周(周日到周六/周一到周日)渲染,要固定今日在中间,需要手动计算以今日为中心的7天日期区间,替换组件默认的自然周区间,同时适配周切换逻辑即可。

具体实现步骤

1. 定义基础变量与区间计算逻辑

首先定义响应式变量,以及以任意日期为中心计算7天区间的方法:

// 以Vue3 + Vuetify3为例
import { ref, onMounted } from 'vue'

const selectedDate = ref(new Date())
const customWeekRange = ref([])

// 计算以传入日期为中心的7天区间
const computeCustomWeek = (centerDate) => {
  const range = []
  const center = new Date(centerDate)
  // 往前推3天 + 当日 + 往后推3天,刚好7天,今日位于第4位即中间列
  for (let i = -3; i <= 3; i++) {
    const date = new Date(center)
    date.setDate(center.getDate() + i)
    range.push(date)
  }
  customWeekRange.value = range
}

// 页面初始化时计算一次初始区间
onMounted(() => {
  computeCustomWeek(selectedDate.value)
})

2. 覆盖v-calendar默认属性

给组件绑定自定义的日期区间,禁用默认的自然周渲染逻辑:

<v-calendar
  v-model="selectedDate"
  view="week"
  :min="customWeekRange[0]"
  :max="customWeekRange[6]"
  <!-- 可按需自定义周头标题,不需要可以删掉此行 -->
  :weekdays="['3天前', '2天前', '1天前', '今天', '1天后', '2天后', '3天后']"
  @update:model-value="(newDate) => computeCustomWeek(newDate)"
/>

3. 样式适配(可选)

如果需要统一列宽、高亮今日,可以加如下CSS:

/* 强制周视图每列宽度均分 */
.v-calendar-weekly__day {
  width: calc(100% / 7);
}
/* 高亮今日列 */
.v-present {
  background-color: #e3f2fd !important;
}

4. 自定义周切换逻辑(可选)

如果保留周切换功能,替换组件默认的上下周逻辑,每次按7天偏移重新计算区间即可:

// 切换到上一周
const switchPrevWeek = () => {
  const newCenter = new Date(selectedDate.value)
  newCenter.setDate(newCenter.getDate() - 7)
  selectedDate.value = newCenter
  computeCustomWeek(newCenter)
}

// 切换到下一周
const switchNextWeek = () => {
  const newCenter = new Date(selectedDate.value)
  newCenter.setDate(newCenter.getDate() + 7)
  selectedDate.value = newCenter
  computeCustomWeek(newCenter)
}

Vuetify2 适配说明

Vuetify2的v-calendar属性略有差异,仅需要把上述代码里的min/max属性替换为start/end,@update:model-value事件替换为@input,其余逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:45:03