
¿Hay alguna manera de generar automáticamente la fecha según el número de semana?
Más precisamente: ingreso el número de semana para un año específico y como resultado obtengo la fecha de lunes a domingo.
Hay varios paquetes para crear calendarios, pero ninguno parece permitirlo. ¿Alguien tiene un buen consejo?
(Taco Hoekwater hizo algo parecido a mi pregunta, pero al revés: Macro para el número de semana)
Respuesta1
También he añadidolo contrario a PGFCalendarpero podemos usarlo y un poco de matemáticas para obtener el día de inicio y fin correcto de la semana requerida.
Tanto PGFCalendar como mi extensiónTikZ-extno proporciona una interfaz de alto nivel para nada de esto, por lo que tenemos que hacer malabarismos con algunos recuentos, valores y conversiones.
Esto no comprobará si una semana determinada pertenece realmente al año. Podría utilizar \weekinyear{174}{2021}
para obtener el mismo resultado que el del código siguiente.
Código
\documentclass{article}
\usepackage{pgfcalendar-ext}
\makeatletter
\newcommand*\weekinyear[2]{% #1 = week, #2 = year
\pgfcalendardatetojulian{#2-01-01}{\count@}%
\edef\wiy@first{\the\count@}%
\pgfcalendarjuliantoweekday{\count@}{\count@}%
\edef\wiy@day{\the\count@}%
\pgfcalendarjulianyeartoweek{\wiy@first}{#2}{\count@}%
\ifnum\count@>1 \count@=0 \fi% first day might be in last week of prev year
\pgfintset\count@{\wiy@first+(#1-\count@)*7-\wiy@day}%
\pgfcalendarjuliantodate{\count@}{\wiyStartY}{\wiyStartM}{\wiyStartD}%
\advance\count@ by 6
\pgfcalendarjuliantodate{\count@}{\wiyEndY}{\wiyEndM}{\wiyEndD}%
}
\makeatother
\begin{document}
\weekinyear{18}{2024}
Week 18 in year 2024 starts on
Monday \wiyStartY-\wiyStartM-\wiyStartD\ and
ends on Sunday \wiyEndY-\wiyEndM-\wiyEndD.
\end{document}
Producción
La semana 18 del año 2024 comienza el lunes 2024-04-29 y finaliza el domingo 2024-05-05.