当前位置:首页 > JavaScript

js实现日期选择

2026-01-30 14:10:32JavaScript

使用原生JavaScript实现日期选择器

创建基础HTML结构

<input type="text" id="datePicker" placeholder="选择日期">
<div id="datePickerCalendar" class="calendar-container"></div>

添加基本CSS样式

.calendar-container {
  display: none;
  position: absolute;
  width: 300px;
  border: 1px solid #ccc;
  background: white;
  z-index: 100;
}
.calendar-header {
  display: flex;
  justify-content: space-between;
  padding: 10px;
  background: #f0f0f0;
}
.calendar-days {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
}
.day-cell {
  padding: 10px;
  text-align: center;
  cursor: pointer;
}
.day-cell:hover {
  background: #eee;
}

实现JavaScript核心功能

document.addEventListener('DOMContentLoaded', function() {
  const dateInput = document.getElementById('datePicker');
  const calendar = document.getElementById('datePickerCalendar');
  let currentDate = new Date();

  dateInput.addEventListener('focus', showCalendar);

  function showCalendar() {
    calendar.style.display = 'block';
    renderCalendar(currentDate);
  }

  function renderCalendar(date) {
    const year = date.getFullYear();
    const month = date.getMonth();

    const firstDay = new Date(year, month, 1);
    const lastDay = new Date(year, month + 1, 0);
    const daysInMonth = lastDay.getDate();

    const startDay = firstDay.getDay();

    let calendarHTML = `
      <div class="calendar-header">
        <button id="prevMonth">←</button>
        <h3>${year}年 ${month + 1}月</h3>
        <button id="nextMonth">→</button>
      </div>
      <div class="calendar-days">
        <div>日</div><div>一</div><div>二</div><div>三</div>
        <div>四</div><div>五</div><div>六</div>
    `;

    for (let i = 0; i < startDay; i++) {
      calendarHTML += `<div class="day-cell"></div>`;
    }

    for (let day = 1; day <= daysInMonth; day++) {
      calendarHTML += `<div class="day-cell" data-day="${day}">${day}</div>`;
    }

    calendarHTML += `</div>`;
    calendar.innerHTML = calendarHTML;

    document.getElementById('prevMonth').addEventListener('click', () => {
      currentDate.setMonth(currentDate.getMonth() - 1);
      renderCalendar(currentDate);
    });

    document.getElementById('nextMonth').addEventListener('click', () => {
      currentDate.setMonth(currentDate.getMonth() + 1);
      renderCalendar(currentDate);
    });

    const dayCells = document.querySelectorAll('.day-cell[data-day]');
    dayCells.forEach(cell => {
      cell.addEventListener('click', () => {
        const selectedDay = cell.getAttribute('data-day');
        const selectedDate = new Date(
          currentDate.getFullYear(),
          currentDate.getMonth(),
          selectedDay
        );
        dateInput.value = formatDate(selectedDate);
        calendar.style.display = 'none';
      });
    });
  }

  function formatDate(date) {
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    return `${year}-${month}-${day}`;
  }
});

使用第三方库实现日期选择

安装flatpickr库

js实现日期选择

npm install flatpickr

基本使用示例

import flatpickr from "flatpickr";
import "flatpickr/dist/flatpickr.min.css";

flatpickr("#datePicker", {
  dateFormat: "Y-m-d",
  allowInput: true,
  locale: "zh"
});

移动端优化的日期选择

使用input的date类型

js实现日期选择

<input type="date" id="mobileDatePicker">

添加JavaScript增强功能

const mobileDatePicker = document.getElementById('mobileDatePicker');
mobileDatePicker.addEventListener('change', function() {
  console.log('选择的日期:', this.value);
});

日期范围选择实现

HTML结构

<input type="text" id="startDate" placeholder="开始日期">
<input type="text" id="endDate" placeholder="结束日期">
<div id="rangePickerCalendar"></div>

JavaScript实现

// 类似单日期选择器的实现,但需要处理两个日期之间的逻辑
// 可参考上述单日期选择器代码扩展

标签: 日期js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Promis…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…