Power Builder - fecha inicio fecha final

 
Vista:

fecha inicio fecha final

Publicado por pcadictions (3 intervenciones) el 06/03/2007 16:01:00
date ld_fecha_inicio, ld_fecha_fin
date ld_fecha_actual
Integer li_dia, li_mes, li_anio
ld_fecha_actual = today()
li_dia = day(ld_fecha_actual)
li_mes = month(ld_fecha_actual)
li_anio = year(ld_fecha_actual)

dw_2.insertrow( 0)

ld_fecha_inicio = date( '01/' +string( li_mes )+ '/' + string(li_anio,'0000'))

dw_2.setitem(dw_2.getrow(),"fecha_inicio",ld_fecha_inicio)
ld_fecha_fin = date( '01/' +string( li_mes + 1 )+ '/' + string(li_anio,'0000'))
ld_fecha_fin = RelativeDate(ld_fecha_fin, -1)

dw_2.setitem(dw_2.getrow(),"fecha_fin",ld_fecha_fin)

Este codigo me permite mostrar por defecto el primer dia del mes y el ultimo dia del mes. lo utilizo para mostrar mis reportes por fechas. pero hay un pequeño detalle que en el ultimo mes (es decir 12) cuando el mes es doce no me muestra la fecha final devido al cambio de año.
quiero mejorar mi codigo. alguien me puede ayudar por favor.
ejemplo.
ahora estamos 06/03/2007

yo en mi ventana de parametros quiero que me muestre por defecto
fecha inicio : 01/03/2007

Fecha Final : 31/03/2007
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:fecha inicio fecha final

Publicado por amilcar (407 intervenciones) el 06/03/2007 17:46:47
justamente en el mes 12 tienes el problema, te paso una
funcion para obtener el ultimo dia del mes pasandole una fecha

//Se coge una fecha, se incrementa el mes, se cambia el día por "01" y entonces restamos 1:
int li_retdays, li_month, li_year ,li_previousMonthLastDay
date ld_newdate

li_month = Month(ad_date)
li_year = year(ad_date)
IF li_month < 12 THEN
li_month ++
ELSE
li_month = 1
li_year ++
END IF
// construimos una fecha nueva
ld_newdate = date(li_year,li_month,1)
// extraemos el último día del mes anterior
li_previousMonthLastDay = day(relativedate(ld_newdate, -1))

return li_previousMonthLastDay
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
Imágen de perfil de Antonio
Val: 176
Bronce
Ha mantenido su posición en Power Builder (en relación al último mes)
Gráfica de Power Builder

Pregunta para resolverlo

Publicado por Antonio (1271 intervenciones) el 06/03/2007 19:03:26
Hola pcadictions:

Quiero entender que necesitas mostrar el dia primero y ultimo de cada mes, es decir, si estamos en Marzo quieres mostrar las fechas:

Inicio: 01/03/2007
Final: 31/03/2007

¿Es correcto ?

porque en tu código:

ld_fecha_fin = date( '01/' +string( li_mes + 1 )+ '/' + string(li_anio,'0000'))

estas incrementando el mes, es decir, si li_mes = Marzo y tu le incrementas uno a li_mes, entonces li_mes = Abril... ¿es correcto esto ?, despues restas un día a la fecha que estas generando para que te de el ultimo dia del mes que estas procesando. Así que te daría los siguente:

inicio: 01/03/2007
Final: 31/03/2007 (en teoria)...

Pues bien, te doy una solución para tu caso:

Date ld_fecha_inicio, ld_fecha_final
integer li_dia_ultimo
string ls_fecha_final

ld_fecha_inicio = Date ( String ( Today(),'dd/mm/yyyy' ) )

li_dia_ultimo = f_finmes ( Month ( ld_fecha_inicio), Year ( ld_fecha_inicio ) )

funcion f_finmes()

crea una funcion externa donde recibe los parametros de:

integer vr_mes, vr_axo
y retorna un valor de tipo integer
/* Código para determinar el último dia del mes, ponlo en el script de la funcion f_finmes() */

string ls_meses[12] = {'31','28','31','30','31','30','31','31','30','31','30','31'}
integer li_return

li_return = Integer ( ls_meses[vr_mes] )

if vr_mes = 2 then
if ( Int ( vr_axo / 4 ) - ( vr_axo / 4 ) ) = 0 then
li_return = 29
end if
end if

return li_return

cuando recuperes el valor de li_dia_ultimo, ramas la fecha final:

ls_fecha_final = String ( li_dia_ultimo )+'/'+String ( Month ( ld_fecha_final ) )+'/'+String ( Year ( ld_fecha_final ) )
ld_fecha_final = Date ( ls_fecha_final )

Incio: String ( ld_fecha_inicio ) = 01/12/2007
Final: String ( ld_fecha_final ) = 31/12/2007

listo... aunque el mes sea 12 (diciembre) no tendras problemas con esto...

Espero te sirva amigo.. y ! suerte !
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