日历生成器
月历与年历生成器:按年月生成日历表格,可选周一起始或周日起始、是否显示周数、标注周末与指定的「今天」,并输出可复制的文本日历或自带样式的 HTML 表格,支持一次生成全年 12 个月。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
日历设置
日期按公历整数天数计算,与本地时区无关。文本日历中方括号 [7] 表示指定的「今天」,星号 * 表示周末;周数一栏的周制跟随一周起始日。
HTML 预览
下面是 HTML 源码的实际渲染效果(自带样式,可直接另存为 .html)。
| W | 一 | 二 | 三 | 四 | 五 | 六 | 日 |
|---|---|---|---|---|---|---|---|
| 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 |
文本日历
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 日历周数