¿Cómo determinamos la cantidad de días para un mes determinado en Python? [duplicate]

3 minutos de lectura

Necesito calcular la cantidad de días para un mes determinado en python. Si un usuario ingresa febrero de 2011, el programa debería poder decirme que febrero de 2011 tiene 28 días. ¿Alguien podría decirme qué biblioteca debo usar para determinar la duración de un mes determinado?

avatar de usuario
Andrés Liebre

Deberías usar calendar.monthrange:

>>> from calendar import monthrange
>>> monthrange(2011, 2)
(1, 28)

Para ser claro, monthrange admite años bisiestos también:

>>> from calendar import monthrange
>>> monthrange(2012, 2)
(2, 29)

Como @mikhail-pyrev menciona en un comentario:

El primer número es el día de la semana del primer día del mes, el segundo número es el número de días en dicho mes.

  • ¿Qué significa (2,29)? Creo que debería ser (1,28)…

    – Nam G VU

    22 de enero de 2018 a las 19:08

  • @NamGVU El primer número es el día de la semana del primer día del mes, el segundo número es el número de días de dicho mes.

    – Mijaíl Pyrev

    8 de febrero de 2018 a las 12:38

  • @NamGVU En 2011, el mes de febrero comenzaba en un día laborable y tenía 28 días. En 2012, el primer día de la semana fue el día 2 y el mes tuvo 29 días ese año.

    – Maddie

    25 de marzo de 2019 a las 14:21

  • @Maddie No, ambos comenzaron en un día laborable: martes (1) en febrero de 2011 y el miércoles (2) en febrero de 2012. El primer entero no devuelve el día de la semana, sino el día de la semana. De 0 (lunes) a 6 (Domingo) por defecto.

    – Nuno Andre

    2 abr 2019 a las 21:54

  • @NunoAndré Lo sé. Estaba explicando que en el año 2011, el mes de febrero (así es el 2), el primero (1) era un día de semana. Y febrero tuvo 28 días ese año. En 2012, en febrero (2), el primer día de la semana fue el segundo (2), y febrero tuvo 29 días en el año 2012.

    – Maddie

    3 abr 2019 a las 22:06


Solución alternativa:

>>> from datetime import date
>>> (date(2012, 3, 1) - date(2012, 2, 1)).days
29

  • La dificultad con esta solución es que si desea usarla todos los meses durante varios años, debe tener en cuenta el incremento anual y el ciclo mensual.

    – Yohan Obadía

    4 de diciembre de 2018 a las 10:26

  • eso es un módulo simple (porque el primer y último mes del año son siempre los mismos)

    – Tipo

    8 de febrero de 2021 a las 0:08

  • OP afirma que lo quiere para un mes (y año) determinado, por lo que esta solución está bien. Necesita verificar 1 fecha a la vez. Puede reemplazarlo con vars para el año, el mes y el día para que sea más flexible, ¡pero esta solución funciona muy bien!

    – MA53QXR

    7 sep 2021 a las 9:53

avatar de usuario
Muñeco de nieve escarchado

Solo por interés académico, lo hice de esta manera…

(dt.replace(month = dt.month % 12 +1, day = 1)-timedelta(days=1)).day

¿Ha sido útil esta solución?