Safe Period Calculator
Estimate your safe days locally: enter the first day of your last period, average cycle length and period days, and get a three-month calendar marking period, fertile window, ovulation day and safe days. Nothing is uploaded. For cycle reference only, not contraception.
The calendar method is the most direct way to see the shape of a cycle: three months of calendars marked day by day, showing which days are the period, which carry the highest chance of conception and which are relatively safe. Menstrual data is sensitive, so the whole calculation happens in your browser and is never uploaded — and how safe "safe days" really are needs reading before anything else.
The important boundary: ovulation is taken as 14 days before the next period, and a fixed 14-day luteal phase is a simplification, so cycles that are irregular — PCOS, breastfeeding, the menopause transition — carry a significant error. The typical annual failure rate of calendar-based contraception is not low, so what is marked here is a cycle reference only and must not be used as contraception; to see further months, reset the last period to the expected cycle start.
Did this tool solve your problem?
Submitting sends the tool name, your input and the current result to the server. Please do not include ID numbers, phone numbers or other private data.
AI assistant It answers using your current input and result
Asking again sends your current input and result to the server once more. Please do not include private data.
How to use
- Enter the last period date, average cycle length and period length.
- Read the three-month calendar of period, fertile and safe days.
- Check the ovulation day, which is marked separately.
- Treat it as a cycle reference, never as contraception.
How it works
How the safe period is computed
The calendar method's convention: the ovulation day is back-solved as "14 days before the next period," the fertile window is 5 days before to 1 day after it, the period is your entered days, and the rest are the safe period. Fill the three inputs and the calendar marks each day immediately.
How to fill the three inputs
Enter the first day of your most recent period as the LMP; the average cycle length as the days between two period first days (21-40 days); the period length as the days bleeding lasts each time (1-10 days). If unsure, record two or three cycles and average.
What the calendar colors mean
In the calendar, red blocks are the period, orange blocks the fertile window (with the darker ovulation day), and colorless days the safe period; below the calendar it also lists each cycle's ovulation day, fertile window and next period date for cross-referencing.
Is the safe period really safe
Not necessarily safe. The calendar method is itself an estimate, ovulation may come early or late, and sperm survive several days in the body, so the safe-period method's failure rate isn't low. This tool's marks are for cycle reference only and can't be used as a contraception basis.
Code example
JavaScript Safe days = everything outside the fertile window (calendar method)
// calendar method: a fixed 14-day luteal phase puts ovulation 14 days before the next period,
// with the fertile window spanning 5 days before to 1 day after it
const DAY = 86400000;
function windowOf(lastPeriod, cycle = 28) {
const next = new Date(lastPeriod.getTime() + cycle * DAY); // next period
const ovulation = new Date(next.getTime() - 14 * DAY); // ovulation day
return {
ovulation,
fertileFrom: new Date(ovulation.getTime() - 5 * DAY),
fertileTo: new Date(ovulation.getTime() + 1 * DAY),
nextPeriod: next,
};
}
// inside [fertileFrom, fertileTo] is fertile; the rest counts as safe (but not the period itself)
const inFertile = (d, w) => d >= w.fertileFrom && d <= w.fertileTo;
Python Lay out a month with datetime
from datetime import date, timedelta
def phases(last_period, cycle=28, days=30):
ovulation = last_period + timedelta(days=cycle - 14)
fertile = (ovulation - timedelta(days=5), ovulation + timedelta(days=1))
out = []
for i in range(days):
d = last_period + timedelta(days=i)
if d == ovulation:
out.append((d, 'ovulation'))
elif fertile[0] <= d <= fertile[1]:
out.append((d, 'fertile'))
else:
out.append((d, 'safe'))
return out
# caveat: the calendar method only suits regular cycles; irregular ones can be days off
FAQ
Is my data uploaded when computing the safe period?
No. The whole calendar projection is done in the browser; the dates entered stay only on the current page and vanish on refresh, and the server saves no record. Rest easy about privacy.
How does the safe-period calendar differ from the ovulation calculator?
The ovulation calculator gives a single cycle's ovulation day and fertile window; this tool draws three consecutive cycles as a calendar, marking each day's period, fertile window, ovulation day and safe period — good for seeing "which days to watch." Both use the same convention and can be used together.
Can I use this calendar with irregular cycles?
It can compute, but the reference value is limited. The calendar method assumes stable cycles, and irregular cycles shift the ovulation day, so marks are only reference; recording 3-6 cycles and averaging first makes it more reliable.
How many days should I enter for the period length?
The days bleeding lasts each time, usually 3-7 days. Enter the actual value and the calendar marks those days as the period; the tool supports 1-10 days.
Can it be used during breastfeeding or around menopause?
Not suitable. During breastfeeding, perimenopause, postpartum recovery and with PCOS, ovulation isn't regular, so the calendar method doesn't apply — consult a doctor or use other monitoring methods.
Why only three months of calendar?
All future cycles are extrapolated from the "last cycle," and the further out, the larger the error; three months is within a usable range. To see further, change the LMP to the expected cycle start and recompute.
Which is more reliable, pre-period or post-period safety?
Both are only relative reference. The post-period safe period abuts the fertile window's start and fails if ovulation is early; the pre-period one is affected by delayed ovulation, and with short cycles the window also shifts earlier. The calendar separates the two to remind you not to treat the whole span as insurance.