Power Builder - obtener cuantos domingo tiene un mes

   
Vista:

obtener cuantos domingo tiene un mes

Publicado por mizalo (113 intervenciones) el 10/02/2011 23:48:28
hola al foro.

Como habran leido en el titulo, quisiera saber si existe un funcion para obtener cuantos domingo tiene un determinado mes.
viendo el calendario de años anteriores no siempre tienen los mismo numeros de domingo

por ejemplo Enero el 2010 tiene 5 domingos, pero en años anteriores tiene 4.

O alguin tiene alguna funcion que me ayude.

muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:obtener cuantos domingo tiene un mes

Publicado por JeinnerH (638 intervenciones) el 11/02/2011 00:05:06
No se si habrá algún algoritmo para obtener este tipo de información, pero lo más simple que se puede hacer es una función que recorra el calendario.

Lo primero que debes hacer es localizar el primer domingo, asignando una variable con el primer día del mes, y luego por diferencia con el número de día, lo ajustas para que te de el primer domingo. Algo como esto (debes revisarlo, porque lo estoy adaptando de otra función que busca los lunes):

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 Domingo Del Mes.
If li_dia < 7 Then &
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, (7 - li_dia))

A continuación, ya teniendo el primer Domingo, es cuestión de crear un ciclo que sume 7 días por vez, hasta que cambie de mes y listo. Algo así:

ai_cant_domingos=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)
ai_cant_domingos++
Loop
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener cuantos domingo tiene un mes

Publicado por PedroWave (4 intervenciones) el 11/02/2011 13:52:22
Continuando con la explicación de JeinnerH, he cambiado el bucle que busca cuántos domingos hay en el mes usando la función month:

public function integer wf_busca_domingos (date adt_fecha);date ldt_fecha_relativa
integer li_dia, li_cuenta, li_mes

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 Domingo Del Mes.
If li_dia < 7 Then &
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, (7 - li_dia))

li_mes = month(ldt_fecha_relativa)

li_cuenta=0
Do While li_mes = month(ldt_fecha_relativa)
ldt_fecha_relativa=RelativeDate(ldt_fecha_relativa, 7)
li_cuenta++
Loop

Return li_cuenta

end function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener cuantos domingo tiene un mes

Publicado por PedroWave (4 intervenciones) el 11/02/2011 17:13:02
Con esta función se pueden calcular cuántos días en un mes son lunes, martes,.. o domingos, con el argumento ai_diasem = 1,2,.. o 7, respectivamente.

public function integer wf_cuenta_diasem (date adt_fecha, integer ai_diasem);
date ldt_fecha
int li_cuenta

If ai_diasem < 1 or ai_diasem > 7 Then Return -1
If ai_diasem = 7 Then ai_diasem = 0
ai_diasem++

li_cuenta = 0
ldt_fecha = Date(Year(adt_fecha), Month(adt_fecha), 1)
Do While Month(ldt_fecha) = Month(adt_fecha)
If DayNumber(ldt_fecha) = ai_diasem Then li_cuenta++
ldt_fecha = RelativeDate(ldt_fecha, 1)
Loop
Return li_cuenta

end function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener cuantos domingo tiene un mes

Publicado por JeinnerH (638 intervenciones) el 11/02/2011 22:19:26
Excelente Pedro, que bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:obtener cuantos domingo tiene un mes

Publicado por PedroWave (4 intervenciones) el 12/02/2011 10:48:50
JeinnerH, ahora el cálculo sin bucles ni ciclos de los días del mes que son lunes, martes, .., o domingos, siendo ai_diasem = 1, 2, .. o 7, respectivamente.

public function integer wf_busca_diasem (date adt_fecha, integer ai_diasem);
date ldt_fecha
integer li_cuenta

If ai_diasem < 1 or ai_diasem > 7 Then Return -1

// Ajusta los días a domingo=1, lunes=2 ... sábado=7.
If ai_diasem = 7 Then ai_diasem = 0
ai_diasem++

// Primer día del mes.
ldt_fecha=Date(Year(adt_fecha), Month(adt_fecha), 1)

// Primer día del mes coincidente con el día de la semana buscado.
ldt_fecha = RelativeDate(ldt_fecha, ai_diasem - DayNumber(ldt_fecha))
If month(ldt_fecha) <> month(RelativeDate(ldt_fecha, 7)) Then &
ldt_fecha = RelativeDate(ldt_fecha, 7)

//Cuenta los días del mes coincidentes con el día de la semana buscado.
li_cuenta = 4
If month(ldt_fecha) = month(RelativeDate(ldt_fecha, 7*4)) Then li_cuenta++
Return li_cuenta

end function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar