Frecuentemente me he topado con la necesidad de realizar este cálculo, en donde ejemplo el día laboral que precede al día lunes 2022-06-13 corresponde al día viernes 2022-06-10.
Iniciamos a partir de un objeto datetime
del módulo datetime
que contendrá los datos de la fecha actual. El método estrella en esta ocasión es datetime.weekday()
, el cual retornará una representación numérica del día de la semana al que corresponde la fecha en un rango de [0-6].
Valor | Día |
---|---|
0 | Lunes |
1 | Martes |
2 | Miércoles |
3 | Jueves |
4 | Viernes |
5 | Sábado |
6 | Domingo |
Ahora la idea principal consiste en que si la fecha corresponde al día lunes, este debe regresar tres días, el domingo dos días y el resto se debe regresar un día.
from datetime import datetime, timedelta
lastBusinessDay = datetime.today()
shift = timedelta(max(1, (lastBusinessDay.weekday() + 6) % 7 - 3))
lastBusinessDay = lastBusinessDay - shift
En cuanto a los asuetos o feriados, por el momento he decidido crear una lista de fechas, en la que si el día anterior es un asueto, volveré a generar un día anterior de forma recursiva.
Foto de Mario Gogh en Unsplash