当前位置:首页 > 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库

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类型

<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实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的HT…

js实现拖拽

js实现拖拽

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

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…