跳到主内容
UniKit

日历生成器

月历与年历生成器:按年月生成日历表格,可选周一起始或周日起始、是否显示周数、标注周末与指定的「今天」,并输出可复制的文本日历或自带样式的 HTML 表格,支持一次生成全年 12 个月。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

日历设置

日期按公历整数天数计算,与本地时区无关。文本日历中方括号 [7] 表示指定的「今天」,星号 * 表示周末;周数一栏的周制跟随一周起始日。

HTML 预览

下面是 HTML 源码的实际渲染效果(自带样式,可直接另存为 .html)。

2026 年 10 月
W一二三四五六日
401234
41567891011
4212131415161718
4319202122232425
44262728293031

文本日历

2026 年 10 月
      一   二   三   四   五   六   日
40                1   2  3*  4*
41    5   6   7   8   9 10* 11*
42   12  13  14  15  16 17* 18*
43   19  20  21  22  23 24* 25*
44   26  27  28  29  30 31*    

HTML 源码

<div class="ukcal">
<style>
  .ukcal { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: #111827; }
  .ukcal table { border-collapse: collapse; margin: 0 0 16px; }
  .ukcal caption { padding: 4px 0; text-align: left; font-weight: 600; font-size: 14px; }
  .ukcal th, .ukcal td { width: 2.2em; height: 2.2em; border: 1px solid #d0d7de; text-align: center; font-size: 13px; }
  .ukcal th { background: #f3f4f6; font-weight: 600; }
  .ukcal .ukcal-week { background: #f8fafc; color: #6b7280; font-size: 12px; }
  .ukcal .ukcal-weekend { color: #b42318; }
  .ukcal .ukcal-out { color: #c3c8cf; }
  .ukcal .ukcal-today { background: #1f6feb; color: #ffffff; font-weight: 700; }
  .ukcal-year { display: flex; flex-wrap: wrap; gap: 16px; }
</style>
<table>
  <caption>2026 年 10 月</caption>
  <thead><tr><th scope="col">W</th><th scope="col" title="星期一">一</th><th scope="col" title="星期二">二</th><th scope="col" title="星期三">三</th><th scope="col" title="星期四">四</th><th scope="col" title="星期五">五</th><th scope="col" title="星期六">六</th><th scope="col" title="星期日">日</th></tr></thead>
  <tbody><tr><th scope="row" class="ukcal-week">40</th><td class="ukcal-day ukcal-out" title="2026-09-28 星期一"></td><td class="ukcal-day ukcal-out" title="2026-09-29 星期二"></td><td class="ukcal-day ukcal-out" title="2026-09-30 星期三"></td><td class="ukcal-day" title="2026-10-01 星期四">1</td><td class="ukcal-day" title="2026-10-02 星期五">2</td><td class="ukcal-day ukcal-weekend" title="2026-10-03 星期六">3</td><td class="ukcal-day ukcal-weekend" title="2026-10-04 星期日">4</td></tr><tr><th scope="row" class="ukcal-week">41</th><td class="ukcal-day" title="2026-10-05 星期一">5</td><td class="ukcal-day" title="2026-10-06 星期二">6</td><td class="ukcal-day" title="2026-10-07 星期三">7</td><td class="ukcal-day" title="2026-10-08 星期四">8</td><td class="ukcal-day" title="2026-10-09 星期五">9</td><td class="ukcal-day ukcal-weekend" title="2026-10-10 星期六">10</td><td class="ukcal-day ukcal-weekend" title="2026-10-11 星期日">11</td></tr><tr><th scope="row" class="ukcal-week">42</th><td class="ukcal-day" title="2026-10-12 星期一">12</td><td class="ukcal-day" title="2026-10-13 星期二">13</td><td class="ukcal-day" title="2026-10-14 星期三">14</td><td class="ukcal-day" title="2026-10-15 星期四">15</td><td class="ukcal-day" title="2026-10-16 星期五">16</td><td class="ukcal-day ukcal-weekend" title="2026-10-17 星期六">17</td><td class="ukcal-day ukcal-weekend" title="2026-10-18 星期日">18</td></tr><tr><th scope="row" class="ukcal-week">43</th><td class="ukcal-day" title="2026-10-19 星期一">19</td><td class="ukcal-day" title="2026-10-20 星期二">20</td><td class="ukcal-day" title="2026-10-21 星期三">21</td><td class="ukcal-day" title="2026-10-22 星期四">22</td><td class="ukcal-day" title="2026-10-23 星期五">23</td><td class="ukcal-day ukcal-weekend" title="2026-10-24 星期六">24</td><td class="ukcal-day ukcal-weekend" title="2026-10-25 星期日">25</td></tr><tr><th scope="row" class="ukcal-week">44</th><td class="ukcal-day" title="2026-10-26 星期一">26</td><td class="ukcal-day" title="2026-10-27 星期二">27</td><td class="ukcal-day" title="2026-10-28 星期三">28</td><td class="ukcal-day" title="2026-10-29 星期四">29</td><td class="ukcal-day" title="2026-10-30 星期五">30</td><td class="ukcal-day ukcal-weekend" title="2026-10-31 星期六">31</td><td class="ukcal-day ukcal-out ukcal-weekend" title="2026-11-01 星期日"></td></tr></tbody>
</table>
</div>

这个工具能做什么

  • 排月度计划或做手账:按年月生成一张整齐的月历,周一起始还是周日起始、要不要显示周数都可以选。
  • 打印或贴到文档里:HTML 输出自带样式,直接另存为 .html 或复制到富文本编辑器就能用。
  • 一次拿到全年:选「全年」即可生成 12 个月的表格,适合做年度排期或教学材料。
  • 标注关键日期:把「今天」填成任意日期,文本日历会用方括号标出,HTML 里会高亮,方便截图说明。

示例

输入

年份 2026,月份 10 月,一周起始日「周一起始」,显示周数,要标注的今天 2026-10-07

输出

文本日历首行「2026 年 10 月」,周数一栏为 40–44,10 月 7 日写作 [7],周末日写作 3*、4*、10*、11*;HTML 源码里对应单元格带有 ukcal-today 与 ukcal-weekend 类名

文本日历里方括号表示指定的「今天」,星号表示周末;周数一栏在周一起始时是 ISO 8601 周号,周日起始时是 US 周号。

常见问题

周数一栏用的是哪种周制?

跟随「一周起始日」:选周一起始就用 ISO 8601 周号(包含当年第一个星期四的那一周为第 1 周),选周日起始就用 US 周号(包含 1 月 1 日的那一周为第 1 周)。这样表头与周号始终一致,不会出现「周日开头却配 ISO 周号」的错位。

为什么某个月只有 4 行、某个月有 5 行甚至 6 行?

网格按需生成:只有当月第一天之前的空位与当月天数加起来超过 7 的整数倍时才会多出一行。2021 年 2 月正好是周一开始的 28 天,所以只有 4 行;大多数月份是 5 行,个别月份会到 6 行。

「今天」是怎么标注的?

在「要标注的今天」里填一个日期(YYYY-MM-DD)。文本日历会用方括号把它括起来,例如 [7];HTML 里会给该单元格加上 ukcal-today 类名,显示为高亮底色。留空则不标注,工具不会自动读取系统时间。

生成的 HTML 需要额外的 CSS 吗?

不需要。输出里带了一段以 .ukcal 为前缀的 <style>,表格、周末颜色与今日高亮都在里面,直接另存为 .html 或用富文本编辑器粘贴都能正常显示。

为什么日历里的日期不会因为时区而错位?

所有日期都用整数天数序号(Howard Hinnant 的 days_from_civil 算法)计算,不经过 Date 对象,所以不存在本地时区或夏令时把某一天挪走的问题,同一天在任何时区都属于同一个格子。

关键词:calendar generatormonth calendaryear calendarprintable calendarhtml calendarcalendar table日历生成器月历年历日历表格html 日历周数

同类工具