🛠️ToolsShed

Menstrual Cycle Calculator

Predict your next period and fertile window based on cycle length and last period date.

Une calculatrice menstruelle vous aide à prévoir vos prochaines dates de règles, la fenêtre de fertilité et le jour d'ovulation en fonction de la durée de votre cycle et de la date de début de vos dernières règles. La plupart des cycles menstruels durent entre 21 et 35 jours, avec une moyenne souvent citée de 28 jours, mais chaque personne a son propre rythme.

Pour utiliser la calculatrice, saisissez la date de début de vos dernières règles et la durée moyenne de votre cycle. L'outil prédira la date de vos prochaines règles, le jour estimé d'ovulation (généralement vers le 14e jour d'un cycle de 28 jours) et votre fenêtre fertile. Vous pouvez aussi visualiser plusieurs cycles futurs en même temps.

Bien que cet outil fournisse des estimations utiles pour la planification, la durée du cycle peut varier en raison du stress, de maladies, d'exercices ou de changements hormonaux. Pour toute décision médicale liée à la fertilité ou à la contraception, consultez un professionnel de santé.

Questions Fréquentes

Implémentation du Code

from datetime import date, timedelta

def menstrual_cycle(last_period: date, cycle_length: int = 28, period_length: int = 5) -> dict:
    """
    Predict next period and fertile window based on cycle data.
    Ovulation assumed at cycle_length - 14 days (luteal phase = 14 days).
    """
    ovulation_day = cycle_length - 14
    next_period = last_period + timedelta(days=cycle_length)
    ovulation_date = last_period + timedelta(days=ovulation_day)
    fertile_start = ovulation_date - timedelta(days=5)
    fertile_end = ovulation_date

    return {
        "last_period":    last_period.strftime("%Y-%m-%d"),
        "next_period":    next_period.strftime("%Y-%m-%d"),
        "ovulation_date": ovulation_date.strftime("%Y-%m-%d"),
        "fertile_window": f"{fertile_start.strftime('%Y-%m-%d')} to {fertile_end.strftime('%Y-%m-%d')}",
        "period_ends":    (last_period + timedelta(days=period_length - 1)).strftime("%Y-%m-%d"),
    }

result = menstrual_cycle(date(2025, 3, 1), cycle_length=28, period_length=5)
print(f"Last Period    : {result['last_period']}")
print(f"Period Ends    : {result['period_ends']}")
print(f"Fertile Window : {result['fertile_window']}")
print(f"Ovulation      : {result['ovulation_date']}")
print(f"Next Period    : {result['next_period']}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.