当前位置:首页 > JavaScript

js实现日历方法

2026-04-07 16:49:44JavaScript

原生JavaScript实现日历

创建日历需要处理日期计算、月份切换以及界面渲染。以下是一个基础实现方案:

// 获取DOM元素
const calendar = document.getElementById('calendar');
const monthYearDisplay = document.getElementById('month-year');
const prevBtn = document.getElementById('prev');
const nextBtn = document.getElementById('next');

let currentDate = new Date();

// 初始化日历
function initCalendar() {
    updateCalendar();
    prevBtn.addEventListener('click', () => {
        currentDate.setMonth(currentDate.getMonth() - 1);
        updateCalendar();
    });
    nextBtn.addEventListener('click', () => {
        currentDate.setMonth(currentDate.getMonth() + 1);
        updateCalendar();
    });
}

// 更新日历显示
function updateCalendar() {
    monthYearDisplay.textContent = `${currentDate.toLocaleString('default', { month: 'long' })} ${currentDate.getFullYear()}`;

    const firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
    const lastDay = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);

    const daysInMonth = lastDay.getDate();
    const startingDay = firstDay.getDay();

    let html = '';

    // 添加空白单元格
    for (let i = 0; i < startingDay; i++) {
        html += `<div class="day empty"></div>`;
    }

    // 添加日期单元格
    for (let i = 1; i <= daysInMonth; i++) {
        html += `<div class="day">${i}</div>`;
    }

    calendar.innerHTML = html;
}

initCalendar();

使用第三方库实现日历

对于更复杂的日历需求,可以考虑使用成熟的库如FullCalendar:

js实现日历方法

// 安装FullCalendar
// npm install @fullcalendar/core @fullcalendar/daygrid

import { Calendar } from '@fullcalendar/core';
import dayGridPlugin from '@fullcalendar/daygrid';

document.addEventListener('DOMContentLoaded', function() {
    const calendarEl = document.getElementById('calendar');

    const calendar = new Calendar(calendarEl, {
        plugins: [dayGridPlugin],
        initialView: 'dayGridMonth',
        headerToolbar: {
            left: 'prev,next today',
            center: 'title',
            right: 'dayGridMonth,dayGridWeek,dayGridDay'
        }
    });

    calendar.render();
});

日历功能扩展

实现日期选择功能:

// 在updateCalendar函数中添加事件监听
function updateCalendar() {
    // ...之前的代码...

    // 添加日期单元格时添加点击事件
    for (let i = 1; i <= daysInMonth; i++) {
        const date = new Date(currentDate.getFullYear(), currentDate.getMonth(), i);
        html += `<div class="day" data-date="${date.toISOString()}">${i}</div>`;
    }

    calendar.innerHTML = html;

    // 添加日期选择事件
    document.querySelectorAll('.day:not(.empty)').forEach(day => {
        day.addEventListener('click', () => {
            const selectedDate = new Date(day.dataset.date);
            console.log('Selected date:', selectedDate);
        });
    });
}

样式基础示例

#calendar {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 5px;
    max-width: 600px;
}

.day {
    padding: 10px;
    text-align: center;
    border: 1px solid #ddd;
    cursor: pointer;
}

.day.empty {
    background-color: #f5f5f5;
}

.day:hover {
    background-color: #e9e9e9;
}

.header {
    display: flex;
    justify-content: space-between;
    margin-bottom: 10px;
}

注意事项

日期处理使用JavaScript的Date对象时要注意月份是从0开始的(0表示一月)

js实现日历方法

国际化显示可以使用toLocaleString方法设置不同语言环境

性能优化对于大量日期的渲染可以考虑虚拟滚动技术

移动端适配需要添加触摸事件支持并调整布局

标签: 日历方法
分享给朋友:

相关文章

vue VUE实现日历组件功能

vue VUE实现日历组件功能

Vue 日历组件实现方法 基础日历结构 使用Vue的模板语法构建日历的HTML结构,通常包含头部(年月显示、切换按钮)和日历表格(星期标题和日期格子)。 <template> <…

vue实现mac日历

vue实现mac日历

Vue 实现 Mac 日历功能 要在 Vue 中实现类似 Mac 日历的功能,可以结合第三方库或自定义组件开发。以下是两种常见方法: 使用 FullCalendar 库 FullCalendar 是…

vue实现日历效果

vue实现日历效果

Vue实现日历效果的方法 使用第三方库 Vue生态中有多个成熟的日历组件库,如v-calendar或vue2-calendar,可以快速实现日历功能。安装后直接引入组件即可使用。 npm i…

vue badge 实现方法

vue badge 实现方法

使用组件库实现 Badge Vue 生态中主流组件库(如 Element UI、Ant Design Vue、Vuetify 等)均提供现成的 Badge 组件。 以 Element UI 为例:…

vue实现多选日历

vue实现多选日历

Vue 实现多选日历 使用 Vue 实现多选日历功能可以借助现有的日历库或手动构建。以下是两种常见方法: 使用第三方库(如 V-Calendar) 安装 V-Calendar 库: npm ins…

vue如何实现日历

vue如何实现日历

使用第三方库(如 FullCalendar) FullCalendar 是一个功能强大的日历库,支持 Vue 集成。安装依赖后,通过组件的方式引入日历功能。配置事件、日期范围和交互逻辑可以通过 pro…