周期计算器

按日历法滚动推算经期:填入末次经期首日、平均周期长度和经期天数,一次列出后续多个周期的经期区间、距今天数和易孕期窗口。

周期经期首日星期经期区间预计排卵日易孕期窗口距今天数
12026-09-10周四2026-09-10 ~ 2026-09-142026-09-242026-09-19 ~ 2026-09-25—
22026-10-08周四2026-10-08 ~ 2026-10-122026-10-222026-10-17 ~ 2026-10-23—
32026-11-05周四2026-11-05 ~ 2026-11-092026-11-192026-11-14 ~ 2026-11-20—
42026-12-03周四2026-12-03 ~ 2026-12-072026-12-172026-12-12 ~ 2026-12-18—
52026-12-31周四2026-12-31 ~ 2027-01-042027-01-142027-01-09 ~ 2027-01-15—
62027-01-28周四2027-01-28 ~ 2027-02-012027-02-112027-02-06 ~ 2027-02-12—
72027-02-25周四2027-02-25 ~ 2027-03-012027-03-112027-03-06 ~ 2027-03-12—
82027-03-25周四2027-03-25 ~ 2027-03-292027-04-082027-04-03 ~ 2027-04-09—
92027-04-22周四2027-04-22 ~ 2027-04-262027-05-062027-05-01 ~ 2027-05-07—
102027-05-20周四2027-05-20 ~ 2027-05-242027-06-032027-05-29 ~ 2027-06-04—
112027-06-17周四2027-06-17 ~ 2027-06-212027-07-012027-06-26 ~ 2027-07-02—
122027-07-15周四2027-07-15 ~ 2027-07-192027-07-292027-07-24 ~ 2027-07-30—
以上为页面打开时的默认示例(末次经期首日 2026-09-10、平均周期 28 天、经期 5 天、黄体期 14 天、推演 24 个周期),表格先显示前 12 行,点「加载更多」查看剩余 12 行。「距今天数」一列在脚本运行后会按当天日期实时填上。

提示:任意输入框里裸按 Enter 即可重新推算;表格里的「距今天数」为负数时表示该经期首日已经过去。结果基于日历法,误差来自排卵日个体差异,不构成医学建议。

使用方法

  1. 在「末次经期首日」选 2026-09-10(页面默认值,即最近一次来潮的第一天);允许 1900-01-01 到 2100-12-31,填未来日期会被拒绝。
  2. 在「平均周期长度」填 28,单位是自然日,允许 15~60 的整数;超出常规范围 21~35 天不报错,只给黄色提示。
  3. 在「经期天数」填 5,指首日到结束日含首尾的天数,允许 1~10,且必须小于平均周期。
  4. 在「黄体期长度」填 14,它决定排卵日落在下次经期首日之前多少天,允许 9~16。
  5. 在「推演周期数」填 24,按平均周期向后滚动 24 次;表格先渲染 12 行,其余点「加载更多」。
  6. 点「推算经期日历」,或在任意输入框里裸按 Enter。结果区给出 8 张摘要卡和明细表;点「复制对照表」拿 TSV,「导出 CSV」下载带 BOM 的表格。

这个周期计算器能解决什么

一是排日程。出差、体检、婚礼、考试撞上经期都很麻烦,把两个参数填进去,接下来两年哪几天是经期一目了然。

二是把易孕期先框出来。备孕的人需要的是「哪几天值得重点测」,而不是精确到小时的排卵时刻;这个周期计算器给出排卵日前 5 天到后 1 天共 7 天的窗口。

三是判断周期是否规律。把平均周期填成 28、30、35 分别看结果怎么变:按记录算出的平均值落在 21~35 天之外时会亮黄条,这就是该去看医生的信号。

四是做两次记录之间的比对。记下推算出的下次经期,真正来潮后再填一次,两次的日期差就是你周期的漂移量。周期为 7 的整数倍(21、28、35)时经期首日始终落在同一个星期几。

本页不做这些事:不预测排卵的具体时刻、不做孕期推算、不管理经期症状、不给避孕建议。

原理和变量:日历法、黄体期与 UTC 日期算术

① 用的是哪个公式。这个周期计算器实现的是日历法(calendar-based method,又称 Ogino–Knaus 法,由日本医生荻野与奥地利医生 Knaus 在 20 世纪 20~30 年代提出)。三条公式只有一行:第 k 个周期的经期首日 = 末次经期首日 + (k−1) × 平均周期长度;第 k 个周期的预计排卵日 = 该周期首日 + 平均周期长度 − 黄体期长度;易孕期窗口 = 排卵日 − 5 天 到 排卵日 + 1 天。本页不引第三方日期库,运算由 Date.UTC() 建毫秒基准、再用 t + n * 86400000 推进。

② 关键参数为什么取这些值。黄体期默认 14 天:卵泡期长短因人而异,黄体期却相对稳定在 12~16 天,取中位 14 天作固定假设是日历法的标准做法;把它做成可调输入(9~16),是因为这个假设直接决定排卵日——从 12 改到 16,排卵日就前后挪 4 天。平均周期默认 28 天只是人群均值,所以输入放宽到 15~60。经期天数默认 5 天,临床常见 3~7 天。

③ 遵循什么标准。日期表示遵循 ISO 8601 的 YYYY-MM-DD 扩展格式与公历规则,跨月、跨年、闰年全交给 UTC 毫秒运算自动进位。周期长度的常规区间采用 ACOG(美国妇产科医师学会)第 651 号委员会意见《Menstruation in Girls and Adolescents》的界定:正常月经周期 21~35 天。本页只拿这个区间做提示,不改变计算结果。

④ 输入是怎么变成输出的。「2026-09-10」先用正则 /^(\d\d\d\d)-(\d\d)-(\d\d)$/ 拆成年月日,再用 Date.UTC(y, m-1, d) 得到毫秒基准,并用回读校验剔除非法日期(如 2026-02-30)。第 k 个周期的首日 = 基准毫秒 + (k−1) × 周期 × 86400000;排卵日 = 该首日 + (周期 − 黄体期) × 86400000;易孕期 = 排卵日 − 5×86400000 到 + 1×86400000。星期几用 (new Date(t).getUTCDay() + 6) % 7 + 1 换成 ISO 周内序号(1 = 周一);「距今天数」= Math.round((目标毫秒 − 今天UTC零点) / 86400000)。

⑤ 边界与阈值。平均周期 15~60 天(常规 21~35);经期 1~10 天且必须小于平均周期;黄体期 9~16 天;推演周期数 1~24;末次经期首日不得晚于今天。推满 24 个周期、周期 28 天时,最后首日距末次首日 644 天,约 1.76 年;易孕期窗口固定 7 天。

⑥ 最常见的误用:把排卵日当成「周期第 14 天」。这是把 28 天周期的特例当通用规律。本页的排卵日由下次经期首日往回减黄体期得到:周期 28 天时是第 15 天(首日算第 1 天,即 2026-09-24),周期 21 天时是第 8 天(2026-09-17),周期 35 天时是第 22 天(2026-10-01)。周期越长排卵日越靠后,「第 14 天」只对 28 天周期成立;说第 14 天的人是把首日记作第 0 天,同一件事的两种记法差了 1。

完整示例(数值仅作演示)

示例条件就是周期计算器页面打开时的默认值:末次经期首日 2026-09-10、平均周期 28 天、经期 5 天、黄体期 14 天、推演 24 个周期。逐项算出来的结果是:

把 24 个周期列全,会看到从 2026-09-10 起清一色都是周四:28 天是 7 的整数倍,星期几被锁死了。若把平均周期改成 30 天(对 7 取模为 2),经期首日每往后一个周期就比上一周期晚 2 个星期几;改成 25 天(取模为 4)则每周期后挪 4 天。这就是「上个月周三来、这个月变成周六」的原因——不是周期乱了,而是周期长度不是 7 的倍数。

下表固定末次经期首日为 2026-09-10,只改「平均周期长度」,可以看出这一个变量如何同时把下次经期和排卵日往后推:

平均周期下次经期首日星期距末次首日预计排卵日排卵日在周期第几天易孕期窗口
21 天2026-10-01周四21 天2026-09-17第 8 天2026-09-12 ~ 09-18
25 天2026-10-05周一25 天2026-09-21第 12 天2026-09-16 ~ 09-22
28 天(默认)2026-10-08周四28 天2026-09-24第 15 天2026-09-19 ~ 09-25
30 天2026-10-10周六30 天2026-09-26第 17 天2026-09-21 ~ 09-27
35 天2026-10-15周四35 天2026-10-01第 22 天2026-09-26 ~ 10-02

最值得注意的是最右两列:周期从 21 天拉到 35 天,下次经期首日只差 14 天,但排卵日在周期里的位置从第 8 天一路挪到第 22 天。周期长度的影响几乎全落在排卵日上,这正是「用第 14 天估排卵日」在长周期身上失效的原因。

输入范围与对照表

五个输入项的取值范围、默认值和越界行为如下。「越界行为」一列很关键:报错会清空结果区并红字说明,提示则照常计算、只给黄色提醒。

输入项允许范围默认值越界行为
末次经期首日1900-01-01 ~ 2100-12-31,且不得晚于今天2026-09-10报错:空值、非法日期(如 2026-02-30)、未来日期
平均周期长度15~60 天的整数28报错:小数、字母、空值、超出 15~60;落在 21~35 之外仅提示
经期天数1~10 天的整数,且必须小于平均周期5报错:小于 1、大于 10、大于或等于平均周期
黄体期长度9~16 天的整数14报错:小数、空值、超出 9~16
推演周期数1~24 个周期24报错:小于 1、大于 24、小数、空值

下面这张表固定平均周期 28 天、下次经期首日 2026-10-08 不变,只改「黄体期长度」,可以回答一个常被问到的问题:不同工具算出的排卵日为什么差两三天——差的就是黄体期这个假设。

黄体期长度预计排卵日星期易孕期窗口与 14 天基准的差
9 天2026-09-29周二2026-09-24 ~ 09-30晚 5 天
12 天2026-09-26周六2026-09-21 ~ 09-27晚 2 天
14 天(默认)2026-09-24周四2026-09-19 ~ 09-25基准
16 天2026-09-22周二2026-09-17 ~ 09-23早 2 天

结果边界与舍入

本页的输出全部是整天,没有任何小数。下面几件事决定了这个结果能信到什么程度:

常见问题

为什么这个周期计算器算出的排卵日和别的 App 差一两天?

主要是黄体期假设不同。本页固定 14 天,有的工具用 12 或 13 天,还有的直接取周期的一半。上面的黄体期对照表可以看到,黄体期从 12 改到 16,排卵日就前后挪 4 天。想知道哪种更贴近你,得用排卵试纸或 B 超实测两三个周期来校准。

排卵日到底该记成「周期第 14 天」还是第 15 天?

取决于首日算第几天。本页把末次首日记作第 1 天,28 天周期的排卵日就落在第 15 天(2026-09-24 距首日 14 天);把首日记作第 0 天时,同一件事写成第 14 天。要点是「第 14 天」只对 28 天周期成立,周期 35 天时要再往后推一周。

我的周期不固定,平均值该填多少?

把最近 6 次周期长度相加除以 6,四舍五入填整数;例如 28、29、27、28、30、28 的平均是 28.3,填 28。本页只收整数周期,所以到第 12 个周期会累积偏 3.3 天。波动超过 7~9 天时,固定周期这个假设本身就不太成立,结果只当粗略参考。

推演 24 个周期之后的日期还可信吗?

当轮廓看。24 个周期、周期 28 天跨度 644 天;真实平均只要和填进去的差 1 天,最后一行就偏 23 天。建议只用最近 3~6 个周期安排具体日程,更远的部分看趋势,并在每次真实来潮后重新填一次末次经期首日。

为什么「经期天数」不允许大于或等于「平均周期长度」?

那样在日历法里没有意义——经期和周期一样长就变成「每天都在经期」,相邻两个周期的首日也无从区分。判据是经期天数必须严格小于平均周期,默认 5 天配 28 天周期,经期占整个周期的 17.9%。

易孕期窗口为什么定成 7 天?

它对应生物学上的可行区间:精子在生殖道内最长存活约 5 天,卵子排出后约 24 小时内可受精。窗口取「排卵日前 5 天 + 当天 + 后 1 天」共 7 天,覆盖「精子先等候」和「卵子刚排出」两种情形;窗口内越靠近排卵日,受孕概率越高。

用这个结果来避孕靠谱吗?

不靠谱,本页不支持这种用法。日历法的前提是周期极其规律、排卵日可预知,而真实排卵日常因压力、疾病、跨时区、短期用药而提前或推后,一次偏差就能让「安全期」失效。避孕请使用专门的方式并咨询医生。

换个时区打开,算出来的日期会变吗?跨过夏令时会错一天吗?

都不会。日期运算全部基于 Date.UTC() 的毫秒值,输入在解析时就被固定成 UTC 零点,之后每次固定加 86400000 毫秒,与所在时区、当地是否实行夏令时完全无关。只有「距今天数」一列随真实当天变化。

相关工具