排卵期日期计算器

按日历法把日期算出来:填上次月经首日和平均周期,用「下次月经首日减 14 天」反推排卵日,再给出前后共 7 天的窗口区间,一次列出未来几个月的日期。

按周期 28 天推算:第 1 个周期月经首日 2026-10-01,排卵日 2026-09-17,窗口 2026-09-12 ~ 2026-09-18(共 7 天)。
下次月经首日2026-10-01
排卵日2026-09-17
窗口区间2026-09-12 ~ 2026-09-18
窗口宽度7 天
推算周期下次月经首日排卵日窗口区间(前 5 天 ~ 后 1 天)
第 1 个周期2026-10-012026-09-172026-09-12 ~ 2026-09-18
第 2 个周期2026-10-292026-10-152026-10-10 ~ 2026-10-16
第 3 个周期2026-11-262026-11-122026-11-07 ~ 2026-11-13
重要:本页是按固定周期外推的日历法日期推算,不能用于避孕。周期一旦波动,推算出的窗口会明显偏移;需要避孕请咨询医生并选择有明确失败率数据的方法。

提示:任意输入框里按 Enter 可直接重算;日期只在本地计算,关闭标签页后不留任何记录。

使用方法

  1. 在「上次月经首日」填日历上的那一天,示例 2026-09-03,格式 YYYY-MM-DD,允许 2000-01-01 ~ 2100-12-31。
  2. 填「平均周期长度」,示例 28 天,允许 21~45 的整数。它指两次月经首日之间的间隔天数,不是经期天数。
  3. 填「经期天数」,示例 5 天,允许 1~10。它只用来标注出血大概覆盖哪几天,不参与排卵日计算。
  4. 填「推算周期数」,示例 3,允许 1~12,决定结果表列出未来多少个月。
  5. 点「按日历法推算日期」,或在任意输入框里直接按 Enter。排卵期日期计算器会在结果区给出每月月经首日、排卵日和窗口区间;下方对照表改一个周期数字,就能看到日期整体平移。

这个排卵期日期计算器能解决什么

一是把「大概在月中」这种口头估算换成可核对的日期。安排复诊、体检、出差、训练计划时,一个能写进日历的具体日期比「差不多那几天」有用得多。

二是把不同周期长度下的日期一次摊开。同样是上次首日 2026-09-03,周期 26 天的人算出排卵日 2026-09-15,周期 32 天的人算出 2026-09-21,两者差了整整 6 天。对照表把 21~45 天全排在一条线上,改一个数看日期怎么走,比反复试错直观。

三是让你看清「日历法」的误差是从哪里冒出来的。它不是测量,而是反推:前提是黄体期固定在 14 天。一旦真实周期在波动,推算结果就跟着漂。本页把这件事写进提示里,而不是丢给你一个看起来精确的日期。

本页不做这些事:不测基础体温、不读排卵试纸、不看宫颈黏液,也不做任何激素或超声相关的判断。排卵期日期计算器只处理日期本身,不承担医学诊断。

推算原理:黄体期 14 天与整数天加减

公式只有一条:排卵日 = 下次月经首日 − 14 天。为什么是「减 14」而不是「加 14」?因为从排卵到下次月经来潮之间那段叫黄体期,长度相对稳定,个体平均约 14 天(常见范围 12~16 天);而排卵日到本次月经首日之间的卵泡期,人和人之间能差出 20 多天。用「下次首日倒推」比用「本次首日正推」稳得多,这是本页唯一的关键取舍,也是它和「按本次首日加 14 天」那类粗算法的分界线。

下次月经首日由 上次月经首日 + 周期长度 得到,两个日期相隔整数天,所以实现上不碰时区,只做整数天加法。本页把日期统一换算成毫秒时间戳:Date.UTC(2026,8,3) 得到 1788393600000,加 n × 86400000 就是第 n 天,再用 getUTCFullYear、getUTCMonth、getUTCDate 拼回 YYYY-MM-DD。

之所以不用 new Date('2026-09-03'),是因为那种字符串会被按 UTC 解析;而 new Date('2026-09-03T00:00:00') 会被按本地时区解析。两者在东八区混用,结果正好差一天,日期计算里最经典的「莫名其妙少一天」就是这么来的。整数天加法没有浮点误差,也不受夏令时影响(中国大陆自 1991 年起不实行夏令时,走 UTC 还能让同一天在别的时区也不漂)。

闰年和跨月全部交给 Date 自己进位:Date.UTC(2028,1,28) 加 2 天得到 2028-03-01(2028 是闰年,2 月有 29 天),2027 年同样操作得到 2027-03-02;跨年也自动处理,2026-12-20 加 28 天是 2027-01-17。这些都不用写判断。

窗口区间由两个生理参数决定。精子在宫颈黏液里最长可存活约 5 天,卵子排出后约 24 小时失去受精能力,所以窗口取「排卵日前 5 天 ~ 排卵日后 1 天」,一共 7 天。这 5 与 1 是本页的固定假设,页面上不开放调节——它们是生理范围,不是可以随喜好设定的参数。

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

示例条件与页面打开时的默认值完全一致:上次月经首日 2026-09-03、周期 28 天、经期 5 天、推算 3 个周期。

这几组日期随页面打开就出现在结果区,与控件里的 28 天、对照表里「周期 28 天」那一行完全对得上,三处是同一个数。

周期长度与日期对照表

下表固定上次月经首日 2026-09-03,把周期从 21 天到 45 天逐档排开。看两件事:一是平移规律——排卵日 = 上次首日 +(周期 − 14),周期每加 1 天、排卵日就往后挪 1 天;二是窗口始终 7 天宽,不随周期变化。

平均周期下次月经首日排卵日窗口区间
21 天2026-09-242026-09-102026-09-05 ~ 2026-09-11
22 天2026-09-252026-09-112026-09-06 ~ 2026-09-12
23 天2026-09-262026-09-122026-09-07 ~ 2026-09-13
24 天2026-09-272026-09-132026-09-08 ~ 2026-09-14
25 天2026-09-282026-09-142026-09-09 ~ 2026-09-15
26 天2026-09-292026-09-152026-09-10 ~ 2026-09-16
27 天2026-09-302026-09-162026-09-11 ~ 2026-09-17
28 天2026-10-012026-09-172026-09-12 ~ 2026-09-18
29 天2026-10-022026-09-182026-09-13 ~ 2026-09-19
30 天2026-10-032026-09-192026-09-14 ~ 2026-09-20
31 天2026-10-042026-09-202026-09-15 ~ 2026-09-21
32 天2026-10-052026-09-212026-09-16 ~ 2026-09-22

点「加载更多周期」把剩下 13 档(33~45 天)补上;点「导出 CSV」存成带 BOM 的表格,Excel 打开不乱码;点「复制对照表」复制成制表符分隔的文本,可以直接粘进表格软件。

边界与精度说明

常见问题

为什么是「下次月经首日 − 14 天」,而不是「本次首日 + 14 天」?

因为黄体期(排卵到下次月经来潮)相对稳定,个体平均约 14 天,波动多在 12~16 天;而卵泡期(本次首日到排卵)在人和人之间能差出二十多天。倒推法只用到一个稳定的量,正推法却要依赖一个高度可变的量,所以本页选前者。

我的周期不规律,还能用吗?

能用来画个大致范围,但别当结论。周期在 26~32 天之间摆动时,同一段推算的排卵日会散开约 6 天,两段 7 天窗口并起来就是 13 天。周期波动越大,这里给出的日期越接近「一个季度里大概那几周」,而不是某一天。

算出来的日期能用来避孕吗?

不能。本页是日历法的日期推算,输出的是一个宽度固定的假设窗口,不是排卵的实测信号。一旦周期波动,真实排卵日就可能落在窗口之外。需要避孕请咨询医生,选用有明确失败率统计的方法。

为什么周期限制在 21~45 天?

因为「黄体期固定 14 天」这个前提只在常见范围内近似成立。周期短于 21 天,倒推出来的卵泡期只剩几天;长于 45 天,往往对应不排卵的周期,减 14 得到的日期没有意义。超出范围时本页会报错,而不是硬算一个数给你。

经期天数会影响排卵日吗?

不会。经期天数只在结果里帮助你识别出血大概覆盖哪几天,完全不进入「下次月经首日 − 14」这条公式。你把 5 改成 7,排卵日和窗口都不会移动。

推算 12 个周期可靠吗?

越往后越不可靠。第 1 个周期只依赖一次已知的首日和一个周期长度;第 12 个周期还要假设中间 11 次月经的间隔都必须一模一样。周期偶尔波动几天是常态,所以建议只看最近 1~3 个周期,后面的当作粗略参考。

为什么日期要按 UTC 算,会不会差一天?

正因为走 UTC 的整数天加法,才不会差一天。常见的坑是把 new Date('2026-09-03')(按 UTC 解析)和 new Date('2026-09-03T00:00:00')(按本地时区解析)混着用,两者在东八区正好差一天。本页统一用 Date.UTC 取时间戳再加整数天,所以你在哪个时区打开,看到的日期都一样。

输入的数据会上传吗?

不会。日期换算全部在浏览器里完成,没有任何网络请求,也不写浏览器存储。想自行确认,打开开发者工具的网络面板,改几次参数,可以看到没有新的请求发出。

相关工具