当前位置:首页 > JavaScript

js日历案例实现

2026-03-15 21:04:30JavaScript

实现基础日历功能

使用JavaScript创建一个简单的日历,需要获取当前日期并生成对应的月份视图。以下是基础实现代码:

function createCalendar(year, month) {
  const daysInMonth = new Date(year, month + 1, 0).getDate();
  const firstDayOfMonth = new Date(year, month, 1).getDay();

  let calendarHTML = '<table><tr><th>日</th><th>一</th><th>二</th><th>三</th><th>四</th><th>五</th><th>六</th></tr><tr>';

  // 填充空白单元格
  for (let i = 0; i < firstDayOfMonth; i++) {
    calendarHTML += '<td></td>';
  }

  // 填充日期
  for (let day = 1; day <= daysInMonth; day++) {
    calendarHTML += `<td>${day}</td>`;

    if ((day + firstDayOfMonth) % 7 === 0) {
      calendarHTML += '</tr><tr>';
    }
  }

  calendarHTML += '</tr></table>';
  document.getElementById('calendar').innerHTML = calendarHTML;
}

// 使用当前年月初始化日历
const currentDate = new Date();
createCalendar(currentDate.getFullYear(), currentDate.getMonth());

添加导航功能

为日历添加上一月和下一月的导航按钮:

let currentYear = new Date().getFullYear();
let currentMonth = new Date().getMonth();

function updateCalendar() {
  document.getElementById('month-year').textContent = 
    `${currentYear}年 ${currentMonth + 1}月`;
  createCalendar(currentYear, currentMonth);
}

document.getElementById('prev-month').addEventListener('click', () => {
  currentMonth--;
  if (currentMonth < 0) {
    currentMonth = 11;
    currentYear--;
  }
  updateCalendar();
});

document.getElementById('next-month').addEventListener('click', () => {
  currentMonth++;
  if (currentMonth > 11) {
    currentMonth = 0;
    currentYear++;
  }
  updateCalendar();
});

updateCalendar();

高亮当前日期

在日历中突出显示当前日期:

function createCalendar(year, month) {
  const today = new Date();
  const isCurrentMonth = year === today.getFullYear() && month === today.getMonth();

  // ...之前的代码...

  for (let day = 1; day <= daysInMonth; day++) {
    const isToday = isCurrentMonth && day === today.getDate();
    calendarHTML += `<td${isToday ? ' class="today"' : ''}>${day}</td>`;
    // ...之后的代码...
  }
}

添加事件处理

为日期单元格添加点击事件:

function createCalendar(year, month) {
  // ...之前的代码...

  for (let day = 1; day <= daysInMonth; day++) {
    calendarHTML += `<td onclick="selectDate(${year}, ${month}, ${day})">${day}</td>`;
    // ...之后的代码...
  }
}

function selectDate(year, month, day) {
  const selectedDate = new Date(year, month, day);
  console.log('选择的日期:', selectedDate.toLocaleDateString());
}

完整HTML结构

日历的完整HTML结构示例:

<div class="calendar-container">
  <div class="calendar-header">
    <button id="prev-month">上个月</button>
    <h2 id="month-year"></h2>
    <button id="next-month">下个月</button>
  </div>
  <div id="calendar"></div>
</div>

<style>
  table {
    border-collapse: collapse;
    width: 100%;
  }
  th, td {
    border: 1px solid #ddd;
    padding: 8px;
    text-align: center;
  }
  th {
    background-color: #f2f2f2;
  }
  .today {
    background-color: #4CAF50;
    color: white;
  }
  .calendar-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
  }
</style>

使用第三方库

如果需要更复杂的日历功能,可以考虑使用现成的JavaScript库:

  • FullCalendar:功能全面的日历组件
  • Pikaday:轻量级日期选择器
  • Flatpickr:现代化的日期时间选择器

例如使用FullCalendar的简单实现:

js日历案例实现

document.addEventListener('DOMContentLoaded', function() {
  const calendarEl = document.getElementById('calendar');
  const calendar = new FullCalendar.Calendar(calendarEl, {
    initialView: 'dayGridMonth',
    headerToolbar: {
      left: 'prev,next today',
      center: 'title',
      right: 'dayGridMonth,timeGridWeek,timeGridDay'
    }
  });
  calendar.render();
});

标签: 日历案例
分享给朋友:

相关文章

elementui案例

elementui案例

Element UI 案例 Element UI 是一个基于 Vue.js 的组件库,广泛用于构建企业级中后台前端界面。以下是一些常见的 Element UI 案例和使用场景: 表单设计 Eleme…

VUE网站案例实现

VUE网站案例实现

VUE网站案例实现方法 基础项目搭建 使用Vue CLI创建新项目,安装必要依赖: npm install -g @vue/cli vue create vue-website cd vue-web…

vue实现点赞案例

vue实现点赞案例

Vue实现点赞功能 基础实现(无持久化) 创建Vue组件,使用v-on绑定点击事件和v-bind动态绑定样式: <template> <button @click=…

react实现携程日历

react实现携程日历

实现携程日历的React组件 创建一个类似携程的日历组件需要处理日期选择、区间高亮、禁用日期等逻辑。以下是关键实现步骤: 日期选择与区间高亮 使用date-fns库处理日期操作,实现开始/结束日期选…

react实现日历

react实现日历

使用 React 实现日历 日历组件在 Web 应用中常用于日期选择、事件展示等场景。以下是几种实现日历的常见方法: 使用第三方库(如 react-calendar) 安装 react-calend…

react 实现长列表案例

react 实现长列表案例

实现长列表的常用方法 虚拟滚动技术(Virtual Scrolling) 虚拟滚动通过仅渲染当前可视区域内的列表项来提升性能,适合超长列表场景。React生态中常用库如react-window或rea…