La solución que le hemos dado es:
Consideramos que una fecha tiene un valor numérico equivalente entero, por lo que podemos hacer comparaciones entre fechas con los operadores mayor, menor, igual, etc. Esto es posible en la mayor parte de lenguajes de programación y hojas de cálculo.
- Plantear los posibles casos de eventos activos que se pueden dar. Hemos encontrado cuatro casos. Hemos considerado cuatro eventos y un periodo de selección:
Periodo de selección
Fsel = 5/5/2067
Ffinsel = 15/10/2067
Evento 1: del 25/9/2067 al 5/10/2067, empieza antes del comienzo del periodo de selección y termina antes del fin del periodo de selección.
Evento 2: del 06/10/2067 al 12/10/2067, empieza después del comienzo del periodo de selección y termina antes del fin del periodo de selección.
Evento 3: del 11/10/2067 al 20/11/2067, empieza después del comienzo del periodo de selección y termina después del fin del periodo de selección.
Evento 4: del 05/05/2067 al 20/12/2067, comienza antes del comienzo del periodo de selección y termina después del fin del periodo de selección.
Expresado en forma de tabla:
Caso | * | Finicio | * | Ffin |
1 | * | <Fsel | * | >Fsel y <Ffinsel |
2 | * | >Fsel | * | <Ffinsel |
3 | * | >Fsel y <Ffinsel | * | >Ffinsel |
4 | * | <Fsel | * | >Ffinsel |
Finalmente, ¿cuál es la condición lógica para dada una lista de eventos cada uno de los cuales tiene una fecha de inicio Finicio y una fecha de terminación Ffin, seleccionar aquellos que están activos en un periodo de selección comprendido entre una fecha inicial Fsel y una fecha final Ffinsel
La condición (Ffin > Fsel y Ffin < Ffinsel) cubre los casos 1 y 2
La condición (Finicio<Ffinsel y Ffin > Fsel) cubre los casos 3 y 4
La condición para poder seleccionar todos los eventos de una lista que estén activos en un periodo de selección determinado sería:
Si (Ffin(i) > Fsel
AND Ffin(i) < Ffinsel
OR Finicio(i) < Ffinsel
AND Ffin(i) > Fsel) entonces
Mostrar "Evento " nombre(i) " activo en el peridodo de selección"
Sino
Mostrar "Evento " nombre(i) " no activo en el peridodo de selección"
FinSi
Hasta donde hemos podido probar funciona bien. Si alguien encuentra algo a mejorar comentarlo. Saludos.