RE:Obtener semana de un mes
Al final está la función, para que la exportes, la pruedes probar con el código que sigue:
// Este es el Código de Prueba Para el Año Completo.
DateTime ldt_fecha, ldt_lunes
Integer li_semana, li_mes, li_ano
Long ll_archivo
ll_archivo=FileOpen('C:\Semana.Txt', LineMode!, Write!, LockWrite!, Replace!)
ldt_fecha=DateTime(Date(2010, 01, 01))
Do While Year(Date(ldt_fecha)) = Year(Today())
ldt_lunes=f_num_semana_mes(DateTime(ldt_fecha), li_semana, li_mes, li_ano)
FileWrite(ll_archivo, 'Fecha:'+String(ldt_fecha)+' S:'+String(li_semana)+' m:'+String(li_mes)+' a:'+String(li_ano)+' L:'+String(ldt_lunes))
ldt_fecha=DateTime(RelativeDate(Date(ldt_fecha), 1))
Loop
FileClose(ll_archivo)
// Revisar Los Resultados en el Archivo C:\Semanas.Txt
$PBExportHeader$f_num_semana_mes.srf
global type f_num_semana_mes from function_object
end type
forward prototypes
global function datetime f_num_semana_mes (datetime adt_fecha, ref integer ai_num_semana, ref integer ai_mes, ref integer ai_ano)
end prototypes
global function datetime f_num_semana_mes (datetime adt_fecha, ref integer ai_num_semana, ref integer ai_mes, ref integer ai_ano);Integer li_dia
Date ldt_fecha_relativa
ai_num_semana=0
ai_mes=Month(Date(adt_fecha))
ai_ano=Year(Date(adt_fecha))
// Primer Día Del Mes, Según la Fecha a Procesar.
ldt_fecha_relativa=Date(Year(Date(adt_fecha)), Month(Date(adt_fecha)), 01)
li_dia=DayNumber(ldt_fecha_relativa)
// Ajustar Los Dias a Lúnes=1, Domingo=7
If li_dia = 1 Then &
li_dia=8
li_dia --
// Buscar Primer Lunes Del Mes.
If li_dia > 1 Then &
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, (8 - li_dia))
If Date(adt_fecha) < ldt_fecha_relativa Then
// La Semana Corresponde al Mes Anterior.
ldt_fecha_relativa=Date(f_num_semana_mes(DateTime(RelativeDate(Date(Year(Date(adt_fecha)), Month(Date(adt_fecha)), 01), -1)), ai_num_semana, ai_mes, ai_ano))
Else
ai_num_semana=1
Do While Not (Date(adt_fecha) >= ldt_fecha_relativa And Date(adt_fecha) <= RelativeDate(ldt_fecha_relativa, 6))
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, 7) // Siguiente Lunes
ai_num_semana++
Loop
End If
RETURN DateTime(ldt_fecha_relativa)
end function