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

如何在Materialize CSS中禁用日期选择器指定区间内的日期

日期选择器指定区间日期禁用实现方案

所有日期选择器的日期禁用能力,核心都是暴露一个日期判断回调:组件渲染每个日期单元格时,会把当前日期传入这个回调,回调返回true则该日期置为不可选状态,返回false则正常可选。要实现2022-07-07至2022-07-28区间的日期禁用,只需要在回调里判断当前日期是否落在目标区间内即可。

通用判断逻辑

为了避免时区、时分秒精度导致的边界判断错误,对比前需要把所有日期统一重置为当日0点的时间戳再做比较:

// 定义禁用区间的首尾时间,统一重置为0点消除时分秒干扰
const disableRangeStart = new Date('2022-07-07').setHours(0, 0, 0, 0);
const disableRangeEnd = new Date('2022-07-28').setHours(0, 0, 0, 0);

/**
 * 日期禁用判断函数
 * @param {Date|string|number} current 组件传入的待判断日期
 * @returns {boolean} true=禁用 false=可选
 */
function checkDisabled(current) {
  const currentTs = new Date(current).setHours(0, 0, 0, 0);
  return currentTs >= disableRangeStart && currentTs <= disableRangeEnd;
}

注意:如果省略重置0点的步骤,部分场景下日期对象自带的时分秒、时区偏移会导致边界日期判断失效,比如2022-07-07 02:00的时间戳会大于部分时区下new Date('2022-07-07')生成的默认时间戳,导致本该禁用的日期漏判。

主流组件库配置示例

Element UI / Element Plus

把上述判断函数直接传入组件的disabledDate属性即可:

<template>
  <el-date-picker
    v-model="selectedDate"
    type="date"
    placeholder="请选择日期"
    :disabled-date="checkDisabled"
  />
</template>

<script setup>
import { ref } from 'vue'
const selectedDate = ref('')
const checkDisabled = (current) => {
  const disableRangeStart = new Date('2022-07-07').setHours(0, 0, 0, 0)
  const disableRangeEnd = new Date('2022-07-28').setHours(0, 0, 0, 0)
  const currentTs = new Date(current).setHours(0, 0, 0, 0)
  return currentTs >= disableRangeStart && currentTs <= disableRangeEnd
}
</script>

Ant Design / Ant Design Vue

组件的disabledDate属性逻辑完全一致,直接复用判断函数即可,单日期选择器、范围选择器通用:

import { DatePicker } from 'antd'

const checkDisabled = (current) => {
  const disableRangeStart = new Date('2022-07-07').setHours(0, 0, 0, 0)
  const disableRangeEnd = new Date('2022-07-28').setHours(0, 0, 0, 0)
  const currentTs = new Date(current).setHours(0, 0, 0, 0)
  return currentTs >= disableRangeStart && currentTs <= disableRangeEnd
}

// 单日期选择器
<DatePicker disabledDate={checkDisabled} />
// 日期范围选择器
<DatePicker.RangePicker disabledDate={checkDisabled} />

原生JS自定义日期选择器/小程序picker

如果是自己实现的日期面板,在渲染每个日期单元格的时候,调用checkDisabled函数,给返回true的单元格加上禁用样式、绑定拦截点击事件即可;如果是小程序原生picker这类没有提供禁用回调的组件,可以在日期选中的回调里做二次校验,选中值在禁用区间内就弹出提示,不更新绑定值。

常见踩坑点

  • 不要直接用字符串做日期大小比较,类似current >= '2022-07-07'的写法在低版本浏览器、跨时区场景下大概率出现判断错误,必须转时间戳对比
  • 要禁用多个不连续的日期区间时,只需要在判断函数里追加多个区间的判断逻辑,任意区间匹配就返回true即可
  • 如果需求是只允许选择指定区间内的日期(也就是禁用区间外的所有日期),只需要把判断条件反向,返回currentTs < disableRangeStart || currentTs > disableRangeEnd即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:42:31