如何禁用 HTML 原生日期选择器中的过去日期、未来两天及周一、周日

老雪吖_4044

老雪吖_4044

2026-07-13

695人浏览

原创

如何禁用 HTML 原生日期选择器中的过去日期、未来两天及周一、周日

HTML 原生 无法直接禁用特定星期几(如周一、周日),但可通过 min 属性限制日期范围,并结合 change 事件校验并拦截非法星期,实现业务所需的日期约束逻辑。

html 原生 `` 无法直接禁用特定星期几(如周一、周日),但可通过 `min` 属性限制日期范围,并结合 `change` 事件校验并拦截非法星期,实现业务所需的日期约束逻辑。

在实际开发中,常需对日期选择器施加多重限制:禁止选择过去日期、限制最多选择未来 N 天、同时排除特定工作日(如周一和周日)。遗憾的是,HTML 原生 仅支持 min 和 max 属性进行范围控制,不支持按星期几禁用选项。因此,必须采用“前端约束 + 实时校验”的组合方案:

✅ 第一步:设置最小可选日期(禁用过去日期 + 未来 2 天)
注意:题干要求“禁用过去日期和 2 天后的日期”,即仅允许今天起至后天(含)之间的日期。这意味着 min 应设为当前日期(today),而 max 应设为 today + 2 days。但需特别注意——原代码中误将 min 设为 today + 2,这会导致今天和明天完全不可选,与需求相悖。正确做法是:

  • min = 今日(new Date() 格式化为 YYYY-MM-DD)→ 允许从今天开始选
  • max = 今日 + 2 天 → 限制最晚只能选后天

✅ 第二步:拦截并拒绝周一(1)和周日(0)的选择
利用 change 事件监听用户选择,调用 Date.prototype.getDay() 获取星期索引(0=Sunday, 1=Monday, ..., 6=Saturday),若值为 0 或 1,则清空输入并提示。

以下是完整、健壮的实现代码:

html-to-pptx
html-to-pptx

将多页 HTML 演示文稿转换为美化的 PPTX 文件,便于分享和分发。

下载
<label>Pickup Date: </label>
<input class="datepicker" type="date" name="delivery_date" id="txtDate" required><script>
function formatDate(date) {
  const y = date.getFullYear();
  const m = String(date.getMonth() + 1).padStart(2, '0');
  const d = String(date.getDate()).padStart(2, '0');
  return `${y}-${m}-${d}`;
}

// ✅ 设置有效日期范围:今天 至 今天+2天(含)
const today = new Date();
const maxDate = new Date(today);
maxDate.setDate(today.getDate() + 2);

document.getElementById('txtDate').min = formatDate(today);
document.getElementById('txtDate').max = formatDate(maxDate);

// ✅ 实时校验:禁止选择周日(0)或周一(1)
document.getElementById('txtDate').addEventListener('change', function (e) {
  const selected = new Date(e.target.value);
  // 注意:若 input 为空(如用户清空),selected 会是 Invalid Date,getDay() 返回 NaN → 安全跳过
  if (isNaN(selected.getTime())) return;

  const dayOfWeek = selected.getDay(); // 0=Sun, 1=Mon
  if (dayOfWeek === 0 || dayOfWeek === 1) {
    alert('❌ Sunday and Monday are not allowed. Please select a valid weekday.');
    e.target.value = ''; // 清空非法选择
    e.target.focus();    // 重新聚焦便于重选
  }
});
</script>

? 关键注意事项:

  • min/max 是声明式约束,仅影响 UI 可选范围,但用户仍可能通过手动输入绕过(尽管 type="date" 浏览器通常禁用文本输入);
  • change 事件校验是防御性保障,必须保留,不可省略;
  • 建议在表单提交时(submit 事件)再次服务端校验,确保数据可靠性;
  • 如需更优体验(如视觉禁用、日历高亮等),应选用第三方库(如 Flatpickr、Luxon + 自定义渲染),而非依赖原生控件。

该方案兼顾兼容性、简洁性与可用性,在不引入额外依赖的前提下,精准满足“禁用过去日期、仅开放今-后天、且排除周日/周一”的全部业务要求。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

4386

5

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

2023.07.04

1109

3

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

2023.07.04

4304

6

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

880

4

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

1756

5

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

2023.09.04

3165

4

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

2023.09.12

4113

6

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

2023.09.20

2660

5

java访问控制修饰符介绍
java访问控制修饰符介绍

java访问控制修饰符有四种,分别是public、protected、private、默认访问修饰符。详细介绍:1、public,public是最宽松的访问控制修饰符,被修饰的类、方法和变量可以被任何其他类访问,当一个类、方法或变量被声明为public时,它们可以在任何地方被访问,无论是同一个包中的类还是不同包中的类;2、protected修饰符等等。

2023.09.20

868

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 219人学习