Fecha -Semana

A ver si me podes ayudar:
Para sacar un numero de semana (1 a 52) de una fecha por lo hago con la función week. Ahora yo tengo que dado un numero de semana establecer un fecha. Seria algo así como al revés pero conla dificultad que le fecha dada la semana podrían ser 7 días. Y no lo puedo programar con un case porque no es rígido ya que de acuerdo el año varia.

1 Respuesta

Respuesta
2
Puedes usar algo como lo siguiente:
nSemana = 14
dFecha = DATE(YEAR(DATE()), 01, 01)
IF nSemana == 1
        nInc = 7 - DOW(dFecha)
ELSE
        nInc = 6
        dFecha = dFecha + (8 - DOW(dFecha))
        DO WHILE WEEK(dFecha) < nSemana
                dFecha = dFecha + 7
        ENDDO
ENDIF
MESSAGEBOX("La Semana número " + LTRIM(STR(nSemana)) + " es del " + ;
        DTOC(dFecha) + " al " + DTOC(dFecha + nInc), 64, "Aviso")
Excelente. Lo probé y funciona bárbaro. ¿Pero no entiendo mucho el código me lo explicas un poco? Sobre todo la sintaxis dFecha = DATE(YEAR(DATE()), 01, 01)
Otra, ¿si uno quisiera saber la fecha que cae el día viernes de la semana elegida es muy complicado?
Millón de gracias.
Fabricio
<table class="w100" style="height: 1px;" border="0" width="1">
<tbody>
<tr>
<td class="MessageTextContainer">
</td>
</tr>
</tbody>
</table>
Te explico el código, se me había pasado validar la última semana del año. Tampoco se valida si la semana es mayor al número de semanas posibles en un año.
nSemana = 14
** DATE() es una función que, utilizada sin argumentos,
** te devuelve la Fecha del Sistema (la que tu computadora tiene configurada)
** Ahora que si tu le incluyes tres argumentos, el Año, el Mes y el Día,
** te devuelve la fecha correspondiente.
** ? DATE(2008, 12, 31)  && Imprimirá 31/12/2008
** YEAR() es una función que te devuele el Año de una fecha especifica.
** ? YEAR({^2008-12-31}) && Imprimirá 2008
** Aquí se obtiene el primer día del año actual,
** o el año que tenga configurado la computadora
** El Día 01 del Mes 01 del Año de la fecha actual
dFecha = DATE(YEAR(DATE()), 01, 01)
** Último día del año actual
dFechaUlt = DATE(YEAR(DATE()), 12, 31)
** Si es la primer semana, se calcula el número de días que hay
** entre la Fecha de Inicio de la semana dos y la Fecha del
** primer Día del Año
IF nSemana == 1
        nInc = 7 - DOW(dFecha)
ELSE
        ** Si no es la primer semana, el incremento va a ser de seis días
        nInc = 6
        ** La variable "dFecha" se iguala a la Fecha de la segunda semana
        dFecha = dFecha + (8 - DOW(dFecha))
        ** Mientras que la semana de la Fecha "contador" sea menor que
        ** la semana especificada...
        DO WHILE WEEK(dFecha) < nSemana
                ** Si la Fecha del último día de la semana en la que
                ** vamos es menor que el último día del año, la Fecha se
                ** incrementa en siete para empezar con la siguiente semana
                IF dFecha + 7 < dFechaUlt
                        dFecha = dFecha + 7
                ELSE
                        ** Si no, se calcula el número de días que hay
                        ** entre la Fecha del último día del año y la Fecha
                        ** "Contador" y se sale del ciclo
                        nInc = 7 - DOW(dFechaUlt)
                        EXIT
                ENDIF
        ENDDO
ENDIF
** Se muestra un mensaje diciendo el rango de Fechas
** que comprenden la Semana seleccionada
MESSAGEBOX("La Semana número " + LTRIM(STR(nSemana)) + " es del " + ;
        DTOC(dFecha) + " al " + DTOC(dFecha + nInc), 64, "Aviso")
** Para lo del Viernes
nVieInc = 6 - DOW(dFecha)
IF nVieInc >= 0
        MESSAGEBOX("El día Viernes del la Semana " + LTRIM(STR(nSemana)) + ;
                " es el " + DTOC(dFecha + nVieInc), 64, "Aviso")
ELSE
        MESSAGEBOX("No hay Viernes en la Semana " + LTRIM(STR(nSemana)), ;
                64, "Aviso")
Endif

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas