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.
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