当前位置:首页 > JavaScript

js实现日历

2026-01-12 13:23:12JavaScript

实现日历的基本思路

使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。

获取当前日期信息

通过Date对象获取当前年份、月份和日期:

const date = new Date();
const currentYear = date.getFullYear();
const currentMonth = date.getMonth();
const currentDay = date.getDate();

计算月份天数

使用Date对象计算某个月份的天数:

js实现日历

function getDaysInMonth(year, month) {
  return new Date(year, month + 1, 0).getDate();
}

计算月份起始星期

确定月份第一天是星期几:

function getFirstDayOfMonth(year, month) {
  return new Date(year, month, 1).getDay();
}

生成日历表格

创建表格并填充日期单元格:

js实现日历

function generateCalendar(year, month) {
  const daysInMonth = getDaysInMonth(year, month);
  const firstDay = getFirstDayOfMonth(year, month);

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

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

  // 填充日期单元格
  for (let i = firstDay; i < 7; i++) {
    html += `<td>${date}</td>`;
    date++;
  }
  html += '</tr>';

  // 填充剩余行
  while (date <= daysInMonth) {
    html += '<tr>';
    for (let i = 0; i < 7 && date <= daysInMonth; i++) {
      html += `<td>${date}</td>`;
      date++;
    }
    html += '</tr>';
  }

  html += '</table>';
  return html;
}

添加月份切换功能

实现月份切换按钮和逻辑:

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

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

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

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

完整HTML结构

配套的HTML基础结构:

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

样式美化建议

添加基本CSS样式增强视觉效果:

table {
  border-collapse: collapse;
  width: 100%;
}
th, td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: center;
}
th {
  background-color: #f2f2f2;
}
#header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 20px;
}

高级功能扩展

  1. 添加日期点击事件处理
  2. 实现日程标记功能
  3. 支持周视图切换
  4. 添加节假日特殊样式
  5. 实现日期范围选择

这些基础代码提供了日历的核心功能,可以根据需求进一步扩展和完善。

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

相关文章

vue实现日历

vue实现日历

Vue 实现日历的基本方法 使用 Vue 实现日历可以通过自定义组件或借助第三方库完成。以下是两种常见实现方式: 自定义日历组件 创建基于 Vue 的日历组件需要处理日期计算和渲染逻辑。核心是生成…

vue怎么实现日历

vue怎么实现日历

实现日历组件的基本方法 使用Vue实现日历组件可以通过以下步骤完成。这里提供一个基础的实现思路,结合Vue 3的Composition API和模板语法。 安装依赖(如需要) npm instal…

js实现跳转

js实现跳转

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

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…