Calcular Ovulacion

Calculadora de Ovulación – Calcula Tu Día Fértil :root { –primary-color: #004a99; –success-color: #28a745; –background-color: #f8f9fa; –text-color: #333; –border-color: #ddd; –shadow-color: rgba(0, 0, 0, 0.1); } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(–background-color); color: var(–text-color); line-height: 1.6; margin: 0; padding: 0; display: flex; flex-direction: column; align-items: center; } .container { width: 100%; max-width: 1000px; margin: 20px auto; padding: 20px; background-color: #fff; border-radius: 8px; box-shadow: 0 4px 15px var(–shadow-color); } header { background-color: var(–primary-color); color: #fff; padding: 20px 0; text-align: center; width: 100%; } header h1 { margin: 0; font-size: 2.5em; } main { padding: 20px 0; } .loan-calc-container { background-color: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px var(–shadow-color); margin-bottom: 30px; } .loan-calc-container h2 { text-align: center; color: var(–primary-color); margin-bottom: 25px; } .input-group { margin-bottom: 20px; text-align: left; } .input-group label { display: block; margin-bottom: 8px; font-weight: bold; color: var(–primary-color); } .input-group input[type="number"], .input-group input[type="date"], .input-group select { width: calc(100% – 22px); padding: 12px; border: 1px solid var(–border-color); border-radius: 5px; font-size: 1em; box-sizing: border-box; transition: border-color 0.3s ease; } .input-group input[type="number"]:focus, .input-group input[type="date"]:focus, .input-group select:focus { border-color: var(–primary-color); outline: none; } .input-group .helper-text { font-size: 0.85em; color: #666; margin-top: 5px; display: block; } .input-group .error-message { color: red; font-size: 0.8em; margin-top: 5px; display: none; /* Hidden by default */ } .button-group { text-align: center; margin-top: 30px; } button { background-color: var(–primary-color); color: white; padding: 12px 25px; border: none; border-radius: 5px; font-size: 1em; cursor: pointer; transition: background-color 0.3s ease, transform 0.2s ease; margin: 0 10px; } button:hover { background-color: #003366; transform: translateY(-2px); } button.reset-button { background-color: #6c757d; } button.reset-button:hover { background-color: #5a6268; } button.copy-button { background-color: var(–success-color); } button.copy-button:hover { background-color: #218838; } #results { margin-top: 30px; padding: 25px; background-color: #eef7ff; border: 1px solid #cce5ff; border-radius: 5px; text-align: center; display: none; /* Hidden by default */ } #results h3 { color: var(–primary-color); margin-bottom: 15px; } #main-result { font-size: 2.2em; font-weight: bold; color: var(–success-color); margin-bottom: 15px; display: block; } #intermediate-results div { margin-bottom: 10px; font-size: 1.1em; } #formula-explanation { font-size: 0.9em; color: #555; margin-top: 15px; border-top: 1px dashed #ccc; padding-top: 15px; } table { width: 100%; border-collapse: collapse; margin-top: 20px; box-shadow: 0 2px 5px var(–shadow-color); } th, td { padding: 12px 15px; text-align: left; border: 1px solid var(–border-color); } thead { background-color: var(–primary-color); color: white; } th { font-weight: bold; } tbody tr:nth-child(even) { background-color: #f2f2f2; } caption { font-size: 1.1em; font-weight: bold; color: var(–primary-color); margin-bottom: 10px; caption-side: top; text-align: left; } #chartContainer { width: 100%; margin-top: 30px; padding: 20px; background-color: #fff; border-radius: 8px; box-shadow: 0 2px 10px var(–shadow-color); text-align: center; } #chartContainer h3 { color: var(–primary-color); margin-bottom: 15px; } canvas { max-width: 100%; height: auto; } .article-section { margin-top: 40px; background-color: #fff; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px var(–shadow-color); } .article-section h2, .article-section h3 { color: var(–primary-color); margin-bottom: 15px; } .article-section h2 { font-size: 2em; border-bottom: 2px solid var(–primary-color); padding-bottom: 10px; } .article-section h3 { font-size: 1.5em; } .article-section p { margin-bottom: 15px; text-align: justify; } .article-section ul, .article-section ol { margin-left: 20px; margin-bottom: 15px; } .article-section li { margin-bottom: 8px; } .faq-item { margin-bottom: 20px; border-bottom: 1px dashed var(–border-color); padding-bottom: 15px; } .faq-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } .faq-item strong { color: var(–primary-color); display: block; margin-bottom: 5px; font-size: 1.1em; } .internal-links { margin-top: 30px; padding: 25px; background-color: #f0f8ff; border: 1px solid #d0e8ff; border-radius: 5px; } .internal-links h3 { color: var(–primary-color); margin-bottom: 15px; } .internal-links ul { list-style: none; padding: 0; } .internal-links li { margin-bottom: 10px; } .internal-links a { color: var(–primary-color); text-decoration: none; font-weight: bold; } .internal-links a:hover { text-decoration: underline; } .highlight { background-color: var(–success-color); color: white; padding: 3px 8px; border-radius: 3px; font-weight: bold; } .error-highlight { border-color: red !important; }

Calculadora de Ovulación

Estima tu día más fértil y ventana de ovulación

Calcula Tu Ovulación

Generalmente entre 21 y 35 días.
Suele ser constante, típicamente 14 días.
Selecciona el primer día de tu sangrado.

Resultados Estimados

Ventana Fértil Estimada

Resumen del Ciclo y Fértilidad
Fase del Ciclo Días Estimados Descripción
Menstruación N/A Días de sangrado. No fértil.
Fase Folicular Temprana N/A Inicio del desarrollo folicular. Baja fertilidad.
Fase Folicular Tardía N/A Aumento de estrógenos. Fertilidad creciente.
Ovulación N/A Liberación del óvulo. Máxima fertilidad.
Fase Lútea N/A Post-ovulación. Fertilidad decreciente.

¿Qué es la Ovulación?

La ovulación es un proceso biológico fundamental en el ciclo menstrual de la mujer, esencial para la reproducción. Consiste en la liberación de un óvulo maduro desde uno de los ovarios. Este evento ocurre aproximadamente a la mitad del ciclo menstrual, aunque su momento exacto puede variar considerablemente entre mujeres e incluso entre ciclos de una misma mujer. Entender la ovulación es clave para quienes buscan concebir o, por el contrario, para quienes utilizan métodos de planificación familiar natural. Nuestra calculadora de ovulación te ayuda a estimar estos días importantes.

¿Quién debe usarla? Cualquier mujer en edad reproductiva que desee entender mejor su ciclo menstrual, identificar sus días más fértiles para aumentar las probabilidades de embarazo, o para quienes practican el método del ritmo o del calendario para evitar la concepción. También es útil para consultar con profesionales de la salud sobre fertilidad.

Conceptos erróneos comunes: Contrario a la creencia popular, la ovulación no siempre ocurre exactamente el día 14 de un ciclo de 28 días. La duración del ciclo y, por ende, el día de la ovulación, puede variar. Además, la ventana fértil no se limita al día exacto de la ovulación, ya que los espermatozoides pueden sobrevivir varios días en el tracto reproductivo femenino.

Fórmula y Explicación Matemática de la Ovulación

Calcular la ovulación se basa en la duración del ciclo menstrual y la fase lútea. La ovulación ocurre aproximadamente X días antes del inicio de la próxima menstruación, donde X es la duración de la fase lútea.

Fórmula Principal:

Día de Ovulación Estimado = Fecha de Inicio de Última Menstruación + (Duración del Ciclo - Duración de la Fase Lútea) días

Ventana Fértil Estimada:

La ventana fértil incluye los días previos a la ovulación y el día de la ovulación. Considerando que los espermatozoides pueden sobrevivir hasta 5 días y el óvulo es viable por unas 12-24 horas:

Inicio Ventana Fértil = Día de Ovulación Estimado - 5 días

Fin Ventana Fértil = Día de Ovulación Estimado

Explicación de Variables:

Variables Clave para la Calculadora de Ovulación
Variable Significado Unidad Rango Típico
Duración del Ciclo Menstrual Número de días desde el primer día de una menstruación hasta el primer día de la siguiente. Días 21 – 35 días
Duración de la Fase Lútea Tiempo entre la ovulación y el inicio de la siguiente menstruación. Suele ser más constante. Días 10 – 16 días (comúnmente 14)
Fecha de Inicio de Última Menstruación (DUM) El primer día del sangrado menstrual. Es el punto de partida del cálculo. Fecha Variable
Día de Ovulación Estimado El día aproximado en que se libera el óvulo. Día del ciclo / Fecha Variable
Inicio Ventana Fértil Primer día con alta probabilidad de concepción. Día del ciclo / Fecha Variable
Fin Ventana Fértil Último día con alta probabilidad de concepción. Día del ciclo / Fecha Variable

Ejemplos Prácticos de Uso

Veamos cómo funciona la calculadora de ovulación con casos reales:

Ejemplo 1: Ciclo Regular

Situación: Ana tiene un ciclo menstrual regular de 28 días y su fase lútea es de 14 días. El primer día de su última menstruación fue el 1 de Mayo de 2024.

Cálculos de la Calculadora:

  • Días hasta la ovulación: 28 (duración ciclo) – 14 (fase lútea) = 14 días.
  • Fecha de Ovulación Estimada: 1 de Mayo de 2024 + 14 días = 15 de Mayo de 2024.
  • Inicio Ventana Fértil: 15 de Mayo – 5 días = 10 de Mayo de 2024.
  • Fin Ventana Fértil: 15 de Mayo de 2024.

Interpretación: Los días más fértiles de Ana serían desde el 10 de Mayo hasta el 15 de Mayo. Para concebir, se recomienda tener relaciones sexuales durante este período, especialmente en los días previos a la ovulación estimada.

Ejemplo 2: Ciclo Irregular con Fase Lútea Constante

Situación: Marta reporta ciclos variables, pero sabe que su fase lútea dura 13 días. Su última menstruación comenzó el 20 de Abril de 2024. Estima una duración promedio de ciclo de 30 días.

Cálculos de la Calculadora:

  • Días hasta la ovulación: 30 (duración ciclo promedio) – 13 (fase lútea) = 17 días.
  • Fecha de Ovulación Estimada: 20 de Abril de 2024 + 17 días = 7 de Mayo de 2024.
  • Inicio Ventana Fértil: 7 de Mayo – 5 días = 2 de Mayo de 2024.
  • Fin Ventana Fértil: 7 de Mayo de 2024.

Interpretación: A pesar de la irregularidad del ciclo, la fase lútea constante permite una estimación. Marta tendría su ventana fértil aproximadamente entre el 2 de Mayo y el 7 de Mayo. Si su ciclo se alarga más allá de 30 días, la ovulación se retrasaría.

Cómo Usar Esta Calculadora de Ovulación

Nuestra herramienta está diseñada para ser simple y efectiva. Sigue estos pasos:

  1. Introduce la Duración Promedio de tu Ciclo: Ingresa el número de días que suelen transcurrir desde el primer día de tu menstruación hasta el día anterior a la siguiente.
  2. Especifica la Duración de tu Fase Lútea: Normalmente es de 14 días, pero puedes ajustarla si conoces tu valor específico.
  3. Selecciona la Fecha de Inicio de tu Última Menstruación: Usa el calendario para marcar el primer día de tu último sangrado.
  4. Haz Clic en "Calcular": La calculadora mostrará instantáneamente:
    • Día de Ovulación Estimado: El día probable en que liberarás el óvulo.
    • Inicio y Fin de la Ventana Fértil: El rango de días con mayor probabilidad de concepción.
    • Resultados Intermedios: Detalles sobre las fases del ciclo.
    • Una tabla resumen y un gráfico visual de tu ciclo y ventana fértil.
  5. Interpreta los Resultados: Utiliza la información para planificar tus intentos de concepción o para tu seguimiento de fertilidad. Recuerda que es una estimación.
  6. Utiliza los Botones:
    • Restablecer: Vuelve a los valores predeterminados si necesitas empezar de nuevo.
    • Copiar Resultados: Guarda la información calculada para tu registro o para compartirla.

Cómo leer los resultados: El resultado principal te indica el día de ovulación estimado. Los rangos de ventana fértil te dan la información más crucial para la concepción. La tabla y el gráfico ofrecen una visión completa de tu ciclo.

Guía de decisión: Si buscas embarazo, concentra las relaciones sexuales en los días de la ventana fértil, especialmente los 2-3 días previos a la ovulación estimada. Si evitas el embarazo, estos días requieren precaución adicional o abstinencia si usas métodos basados en el calendario.

Factores Clave que Afectan los Resultados de Ovulación

Si bien la calculadora de ovulación ofrece una estimación basada en promedios, varios factores pueden influir en la precisión:

  1. Irregularidad del Ciclo: Ciclos que varían significativamente en duración (más o menos de 7 días de diferencia entre ciclos) hacen que las predicciones basadas en promedios sean menos fiables. La ovulación puede ocurrir más tarde o más temprano de lo esperado.
  2. Estrés y Cambios en el Estilo de Vida: Niveles elevados de estrés, cambios drásticos de peso, ejercicio excesivo o enfermedades pueden alterar la producción hormonal y retrasar o adelantar la ovulación.
  3. Condiciones Médicas: Enfermedades como el síndrome de ovario poliquístico (SOP), problemas de tiroides o la perimenopausia pueden afectar la regularidad ovulatoria y hacer que los cálculos sean inexactos.
  4. Medicamentos: Algunos tratamientos, incluyendo ciertos medicamentos para la fertilidad, anticonceptivos hormonales (que suprimen la ovulación) o incluso algunos medicamentos comunes, pueden interferir con el patrón ovulatorio normal.
  5. Variabilidad de la Fase Lútea: Aunque se considera más constante, la fase lútea también puede fluctuar ligeramente, afectando el momento exacto de la ovulación. Una fase lútea acortada puede indicar problemas de fertilidad.
  6. Calidad del Óvulo y Viabilidad de los Espermatozoides: La calculadora estima el *momento* de la ovulación, pero la fertilidad también depende de la calidad del óvulo liberado y la salud de los espermatozoides. Factores como la edad materna afectan la calidad ovular.

Preguntas Frecuentes (FAQ) sobre la Ovulación

¿Puedo quedar embarazada si tengo relaciones sexuales el día después de la ovulación?

Es poco probable. El óvulo es viable solo durante 12 a 24 horas después de la ovulación. Si tuviste relaciones justo después de la ovulación, la concepción es posible pero menos probable que en los días previos.

¿Cuándo debo empezar a usar la calculadora de ovulación?

Idealmente, después de haber registrado al menos 2-3 ciclos menstruales para tener datos fiables sobre la duración promedio.

¿La calculadora predice la ovulación con un 100% de certeza?

No. Es una herramienta de estimación basada en promedios y datos proporcionados. Factores biológicos individuales pueden causar variaciones. Se recomienda complementar con otros métodos de seguimiento de fertilidad (temperatura basal, moco cervical) para mayor precisión.

¿Qué es la ventana fértil y por qué es importante?

La ventana fértil son los días del ciclo menstrual en los que es posible el embarazo. Incluye los días previos a la ovulación (por la supervivencia de los espermatozoides) y el día de la ovulación (por la viabilidad del óvulo). Maximizar las relaciones sexuales durante esta ventana aumenta las posibilidades de concebir.

¿Cómo puedo saber si mi fase lútea es corta?

Una fase lútea se considera corta si dura menos de 10 días. Esto puede ser difícil de determinar sin seguimiento médico o métodos como la medición de la temperatura basal corporal (TBC) de forma consistente.

¿Puedo usar esta calculadora si estoy tomando anticonceptivos?

No es recomendable. La mayoría de los anticonceptivos hormonales impiden la ovulación. Si estás usando anticonceptivos, consulta a tu médico sobre métodos de seguimiento de fertilidad o planificación familiar.

¿Qué son los días "no fértiles" según la calculadora?

Los días considerados menos fértiles son aquellos fuera de la ventana fértil estimada. Esto incluye la fase menstrual (sangrado) y la mayor parte de la fase lútea después de que el óvulo ha dejado de ser viable.

¿Cómo afecta la edad a la ovulación y la fertilidad?

Con la edad, la cantidad y calidad de los óvulos disminuye, lo que puede hacer que la ovulación sea menos regular y reducir las posibilidades de concepción, incluso si la calculadora predice un día fértil.

var chartInstance = null; // Variable global para el gráfico function getElement(id) { return document.getElementById(id); } function displayError(elementId, message, showError) { var errorElement = getElement(elementId + "Error"); if (errorElement) { errorElement.textContent = message; errorElement.style.display = showError ? 'block' : 'none'; getElement(elementId).classList.toggle('error-highlight', showError); } } function isValidNumber(value, min, max) { if (value === "") return { valid: false, message: "Este campo es obligatorio." }; var num = parseFloat(value); if (isNaN(num)) return { valid: false, message: "Por favor, introduce un número válido." }; if (num max) return { valid: false, message: "El valor es demasiado alto." }; return { valid: true }; } function calculateOvulation() { var cycleLengthInput = getElement("cycleLength"); var lutealPhaseInput = getElement("lutealPhase"); var lastPeriodStartDateInput = getElement("lastPeriodStartDate"); var cycleLengthResult = isValidNumber(cycleLengthInput.value, 20, 45); var lutealPhaseResult = isValidNumber(lutealPhaseInput.value, 10, 16); var lastPeriodStartDateValue = lastPeriodStartDateInput.value; displayError("cycleLength", "", false); displayError("lutealPhase", "", false); displayError("lastPeriodStartDate", "", false); var isValid = true; if (!cycleLengthResult.valid) { displayError("cycleLength", cycleLengthResult.message, true); isValid = false; } if (!lutealPhaseResult.valid) { displayError("lutealPhase", lutealPhaseResult.message, true); isValid = false; } if (lastPeriodStartDateValue === "") { displayError("lastPeriodStartDate", "La fecha de inicio de la última menstruación es obligatoria.", true); isValid = false; } if (!isValid) { getElement("results").style.display = 'none'; return; } var cycleLength = parseFloat(cycleLengthInput.value); var lutealPhase = parseFloat(lutealPhaseInput.value); var lastPeriodStartDate = new Date(lastPeriodStartDateValue); // Validación adicional de fechas var today = new Date(); today.setHours(0, 0, 0, 0); // Normalizar para comparación var periodStartDate = new Date(lastPeriodStartDate); periodStartDate.setHours(0, 0, 0, 0); // Normalizar if (periodStartDate > today) { displayError("lastPeriodStartDate", "La fecha de inicio de la última menstruación no puede ser en el futuro.", true); isValid = false; getElement("results").style.display = 'none'; return; } var daysUntilOvulation = cycleLength – lutealPhase; if (daysUntilOvulation < 0) { displayError("cycleLength", "La duración del ciclo debe ser mayor que la fase lútea.", true); displayError("lutealPhase", "La fase lútea no puede ser mayor que la duración del ciclo.", true); isValid = false; getElement("results").style.display = 'none'; return; } var ovulationDate = new Date(lastPeriodStartDate); ovulationDate.setDate(lastPeriodStartDate.getDate() + daysUntilOvulation); var fertileWindowStart = new Date(ovulationDate); fertileWindowStart.setDate(ovulationDate.getDate() – 5); var fertileWindowEnd = new Date(ovulationDate); // El óvulo es viable por 24h, así que el día de ovulación es el último día fértil. var options = { year: 'numeric', month: 'long', day: 'numeric' }; var ovulationDateString = ovulationDate.toLocaleDateString('es-ES', options); var fertileWindowStartString = fertileWindowStart.toLocaleDateString('es-ES', options); var fertileWindowEndString = fertileWindowEnd.toLocaleDateString('es-ES', options); var nextPeriodDate = new Date(lastPeriodStartDate); nextPeriodDate.setDate(lastPeriodStartDate.getDate() + cycleLength); var nextPeriodDateString = nextPeriodDate.toLocaleDateString('es-ES', options); var resultsDiv = getElement("results"); getElement("main-result").textContent = ovulationDateString; getElement("ovulationDate").textContent = "Día de Ovulación Estimado: " + ovulationDateString; getElement("fertileWindowStart").textContent = "Inicio Ventana Fértil: " + fertileWindowStartString; getElement("fertileWindowEnd").textContent = "Fin Ventana Fértil: " + fertileWindowEndString; var formulaText = "La ovulación se estima restando la duración de la fase lútea (días " + lutealPhase + ") al total de días del ciclo (" + cycleLength + " días). El resultado indica cuántos días después del inicio de tu última menstruación ocurrirá la ovulación. La ventana fértil abarca los 5 días previos a la ovulación estimada más el día de la ovulación."; getElement("formula-explanation").textContent = formulaText; resultsDiv.style.display = 'block'; updateTableAndChart(lastPeriodStartDate, cycleLength, lutealPhase, ovulationDate, fertileWindowStart, fertileWindowEnd, nextPeriodDate); } function updateTableAndChart(lastPeriodStartDate, cycleLength, lutealPhase, ovulationDate, fertileWindowStart, fertileWindowEnd, nextPeriodDate) { // Actualizar Tabla var periodEndDate = new Date(lastPeriodStartDate); periodEndDate.setDate(lastPeriodStartDate.getDate() + 4); // Asumiendo 5 días de periodo var tablePeriodDays = lastPeriodStartDate.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }) + " – " + periodEndDate.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }); getElement("tablePeriodDays").textContent = tablePeriodDays; var folicularEarlyStart = new Date(periodEndDate); folicularEarlyStart.setDate(periodEndDate.getDate() + 1); var folicularEarlyEnd = new Date(ovulationDate); folicularEarlyEnd.setDate(ovulationDate.getDate() – 5); // Fin del periodo pre-ovulatorio temprano var tableFollicularEarly = folicularEarlyStart.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }) + " – " + folicularEarlyEnd.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }); getElement("tableFollicularEarly").textContent = tableFollicularEarly; var folicularLateStart = new Date(ovulationDate); folicularLateStart.setDate(ovulationDate.getDate() – 4); // Inicio fase folicular tardía var folicularLateEnd = new Date(ovulationDate); folicularLateEnd.setDate(ovulationDate.getDate() – 1); // Fin fase folicular tardía var tableFollicularLate = folicularLateStart.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }) + " – " + folicularLateEnd.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }); getElement("tableFollicularLate").textContent = tableFollicularLate; var tableOvulationDay = ovulationDate.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }); getElement("tableOvulationDay").textContent = tableOvulationDay; var lutealStart = new Date(ovulationDate); var lutealEnd = new Date(nextPeriodDate); lutealEnd.setDate(nextPeriodDate.getDate() – 1); var tableLutealPhase = ovulationDate.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }) + " – " + lutealEnd.toLocaleDateString('es-ES', { day: 'numeric', month: 'numeric' }); getElement("tableLutealPhase").textContent = tableLutealPhase; // Preparar datos para el gráfico var chartData = { labels: [], datasets: [ { label: 'Fase No Fértil', data: [], backgroundColor: 'rgba(108, 117, 125, 0.5)', // Gris borderColor: 'rgba(108, 117, 125, 1)', borderWidth: 1, fill: false, tension: 0.1 }, { label: 'Fase Fértil', data: [], backgroundColor: 'rgba(40, 167, 69, 0.5)', // Verde borderColor: 'rgba(40, 167, 69, 1)', borderWidth: 1, fill: false, tension: 0.1 }, { label: 'Ovulación', data: [], backgroundColor: 'rgba(0, 74, 153, 0.6)', // Azul primario borderColor: 'rgba(0, 74, 153, 1)', borderWidth: 1, fill: false, tension: 0.1 } ] }; var dates = []; var currentDate = new Date(lastPeriodStartDate); var endDate = new Date(nextPeriodDate); // Hasta el día antes de la siguiente menstruación // Generar fechas y asignar fases for (var i = 0; currentDate = lastPeriodStartDate && currentDate = new Date(lastPeriodStartDate.getTime() + 5 * 24 * 60 * 60 * 1000) && currentDate = new Date(fertileWindowStart.getTime()) && currentDate = ovulationDate && currentDate < nextPeriodDate) { phase = 'Lútea'; datasetIndex = 0; // Non-Fertile } // Rellenar todos los datasets con null para mantener la línea continua donde hay datos chartData.datasets.forEach(function(dataset, index) { if (index === datasetIndex) { dataset.data.push(1); // Representa que está en esta fase } else { dataset.data.push(null); // No marcar en otros datasets } }); currentDate.setDate(currentDate.getDate() + 1); } chartData.labels = dates; var ctx = getElement('fertilityChart').getContext('2d'); // Destruir gráfico anterior si existe if (chartInstance) { chartInstance.destroy(); } // Crear nuevo gráfico chartInstance = new Chart(ctx, { type: 'line', data: chartData, options: { responsive: true, maintainAspectRatio: false, scales: { x: { display: true, title: { display: true, text: 'Día del Ciclo' }, ticks: { autoSkip: true, maxTicksLimit: 15 // Mostrar menos etiquetas en X si hay muchos días } }, y: { display: false // Ocultar eje Y ya que solo usamos valores para colorear tramos } }, plugins: { legend: { display: false // La leyenda se genera manualmente }, tooltip: { callbacks: { label: function(context) { var label = context.dataset.label || ''; if (label) { label += ': '; } if (context.parsed.y !== null) { label += context.parsed.y; // Mostrar 1 o el valor si se usara } return label + " (" + context.label + ")"; } } } }, elements: { point:{ radius: 0 // No mostrar puntos, solo las líneas de área } }, interaction: { mode: 'index', intersect: false, }, layout: { padding: { top: 20, left: 10, right: 10, bottom: 10 } } } }); // Generar Leyenda Manualmente var legendHtml = '
    '; chartData.datasets.forEach(function(dataset) { legendHtml += '
  • ' + dataset.label + '
  • '; }); legendHtml += '
'; getElement('chartLegend').innerHTML = legendHtml; getElement('chartContainer').style.display = 'block'; } function resetCalculator() { getElement("cycleLength").value = "28"; getElement("lutealPhase").value = "14"; getElement("lastPeriodStartDate").value = ""; // Limpiar errores displayError("cycleLength", "", false); displayError("lutealPhase", "", false); displayError("lastPeriodStartDate", "", false); // Ocultar resultados getElement("results").style.display = 'none'; getElement("chartContainer").style.display = 'none'; // Limpiar tabla getElement("tablePeriodDays").textContent = "N/A"; getElement("tableFollicularEarly").textContent = "N/A"; getElement("tableFollicularLate").textContent = "N/A"; getElement("tableOvulationDay").textContent = "N/A"; getElement("tableLutealPhase").textContent = "N/A"; // Destruir gráfico si existe if (chartInstance) { chartInstance.destroy(); chartInstance = null; } getElement('chartLegend').innerHTML = "; } function copyResults() { var mainResult = getElement("main-result").textContent; var ovulationDate = getElement("ovulationDate").textContent; var fertileWindowStart = getElement("fertileWindowStart").textContent; var fertileWindowEnd = getElement("fertileWindowEnd").textContent; var formula = getElement("formula-explanation").textContent; var assumptions = "Asunciones:\n"; assumptions += "- Duración Ciclo: " + getElement("cycleLength").value + " días\n"; assumptions += "- Duración Fase Lútea: " + getElement("lutealPhase").value + " días\n"; assumptions += "- Inicio Última Menstruación: " + getElement("lastPeriodStartDate").value + "\n"; var textToCopy = "Resultados Calculadora de Ovulación:\n\n"; textToCopy += mainResult + "\n"; textToCopy += ovulationDate + "\n"; textToCopy += fertileWindowStart + "\n"; textToCopy += fertileWindowEnd + "\n\n"; textToCopy += formula + "\n\n"; textToCopy += assumptions; // Usar el método navigator.clipboard para copiar if (navigator.clipboard && window.isSecureContext) { navigator.clipboard.writeText(textToCopy).then(function() { // Opcional: mostrar un mensaje de éxito al usuario var originalText = document.querySelector('.copy-button').textContent; document.querySelector('.copy-button').textContent = 'Copiado!'; setTimeout(function() { document.querySelector('.copy-button').textContent = originalText; }, 2000); }).catch(function(err) { console.error('Error al copiar texto: ', err); // Fallback para navegadores que no soportan navigator.clipboard copyTextFallback(textToCopy); }); } else { // Fallback para navegadores que no soportan navigator.clipboard o no están en HTTPS copyTextFallback(textToCopy); } } // Fallback para copiar texto si navigator.clipboard no está disponible function copyTextFallback(text) { var textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; // Evitar que desplace el scroll textArea.style.left = "-9999px"; textArea.style.top = "-9999px"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); var msg = successful ? 'Copiado!' : 'Error al copiar'; var originalText = document.querySelector('.copy-button').textContent; document.querySelector('.copy-button').textContent = msg; setTimeout(function() { document.querySelector('.copy-button').textContent = originalText; }, 2000); } catch (err) { console.error('Error al copiar texto con fallback: ', err); var originalText = document.querySelector('.copy-button').textContent; document.querySelector('.copy-button').textContent = 'Error'; setTimeout(function() { document.querySelector('.copy-button').textContent = originalText; }, 2000); } document.body.removeChild(textArea); } // Cargar el gráfico solo cuando el DOM esté listo y la librería Chart.js esté disponible document.addEventListener('DOMContentLoaded', function() { // Asegurarse de que Chart.js está cargado antes de intentar usarlo if (typeof Chart !== 'undefined') { // No calcular ni dibujar nada hasta que el usuario interactúe } else { console.error("Chart.js no está cargado. El gráfico no se mostrará."); } }); <!– Puedes añadirla a través de un CDN en el o incluirla localmente –>

Leave a Comment