Clipper/FiveWin - añadir años a campo fecha

 
Vista:

añadir años a campo fecha

Publicado por antonio (222 intervenciones) el 19/11/2007 08:21:46
Hola:
A ver si alguien me puede ayudar, necesito poder añadir años a un campo fecha de forma que me de el mismo dia y el mismo mes con x años de difrerencia por mas o por menos.
wfecha = date()
sumar o restar a esta fecha x años.
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:añadir años a campo fecha

Publicado por Adalberto Baqueros (213 intervenciones) el 19/11/2007 13:27:07
Hola Antonio.

Lo haría de ésta menera:
//
FUNCTION AumentaYear( dFecAnt , nNumYear )
//
LOCAL cDia , cMes , cYear , dFecha
cDia := STRZERO( DAY( dFecAnt ) , 2 , 0 )
cMes:= STRZERO( MONTH( dFecAnt ) , 2 , 0 )
cYear:= STRZERO( ( YEAR( dFecAnt ) + nNumYear ) , 4 , 0 )
//
dFecha:= CTOD( ( cMes + '/' + cDia + '/' + cYear ) )
RETURN dFecha

Saludos, desde Santa Cruz de la Sierra - Bolivia.
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:añadir años a campo fecha

Publicado por antonio (222 intervenciones) el 19/11/2007 13:29:50
Gracias perfecto funciona es lo que queria:
Gracias de nuevo.
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:añadir años a campo fecha

Publicado por Ricardo Ramirez Espinoza (201 intervenciones) el 19/11/2007 19:12:48
... Que pasaria se nNumYear assume um valor no deseado, por error???

Pq no sumas a la fecha 365 por ejemplo!
dFecha+=365

Saludos
Ricardo Ramírez!
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:añadir años a campo fecha

Publicado por Adalberto Baqueros (213 intervenciones) el 20/11/2007 00:39:28
Hola Ricardo,

Has probado a sumar 365 a la fecha de hoy?, te va a dar 18-nov-2008 y no 19-nov-2008 como desaba Antonio.

La función que pasé no valida los parámetros, pues sólo pretendía mostrar cómo hacer que una fecha más X años de como resultado el mismo día y més, por ejemplo hoy 19-nov-2007 + 10 debe dar 19-nov-2017.

Saludos, desde Santa Cruz de la Sierra - Bolivia.
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:añadir años a campo fecha

Publicado por antonio (222 intervenciones) el 20/11/2007 09:04:09
Gracia a los dos pero si sumas 365 a la fecha, te puede dar el mismo dia o no, dependiendo de los años visiestos que pasen entre el año inicial y el año final, lo de meter un año no valido se puede solucionar bloqueando los mayor que y menos que.
Gracias.
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:añadir años a campo fecha

Publicado por Ricardo Ramírez Espinoza (201 intervenciones) el 20/11/2007 16:45:23
Antonio... si eso pretendias entonces, puedes ahorrarte algo de codigo

Function AumentaYear(dData, nAno)
dData:=dtoc(dData)
Return ctod(Left(dData, 6) + Alltrim(Str(Val( right( ctod(dData) ,4) ) + nAno) ))

Saludos!
Ricardo Ramirez!
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:añadir años a campo fecha

Publicado por El Duro (121 intervenciones) el 22/11/2007 19:41:31
Jovenes:

Y que pasará si la fecha inicial es 29/Feb/1997 ?, asumiendo que 1997 es un año bisiesto devolverá 29/Feb/1998. Supongo que va a regresar un error de fecha no válida.

El Duro
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:añadir años a campo fecha

Publicado por ANTONIO (222 intervenciones) el 23/11/2007 10:40:18
Habra que tenerlo en cuenta.
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:añadir años a campo fecha

Publicado por ANTONIO (222 intervenciones) el 23/11/2007 10:41:37
if mes=2 y dia=29 que reste 1 a dia
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:añadir años a campo fecha

Publicado por El Duro (121 intervenciones) el 23/11/2007 14:14:15
Antonio:

Nop, yo no lo haría así !, desde luego cada uno tiene su forma de atacar los problemas peroooooo...

Creo que algo más conveniente sería mas o menos así, no tengo la rutina hecha pero te transmito la idea para que la desarrolles.

1.- Debemos considerar la fecha inicial y los años que deseas incrementar
2.- A la fecha inicial ir agregando 365 o 366 dias dependiendo del año que resulte de incrementar 1 al año de la fecha inicial, puede ser con un FOR..NEXT o un DO WHILE, como prefieras.
3.- Lo que debe determinar si incrementas 365 o 366 a la fecha inicial será si el año resultante de sumar 1 al año de la fecha inicial resulte ser bisiesto o no.

El código quedaría mas o menos así:

dFecIni := DATE() // Hoy
dFecNva := DATE()
nIncr := 5 // Incrementaremos 5 años
nVez := 0
nNvo := 0
nDias := 0

FOR nVez := 1 TO nIncr
nNvo := YEAR(dFecIni) + nVez
IF nNvo EsBisiesto() // Hay que desarrollar la funcion EsBisiesto()
nDias += 366
ELSE
nDias += 365
ENDIF
NEXT

dFecNva := dFecIni + nDias

LISTO !, solo te resta hacer la función que determine si el año en cuestión es bisiesto o no

El Duro
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:añadir años a campo fecha

Publicado por ANTONIO (222 intervenciones) el 24/11/2007 08:37:19
Lla funcion para calcular si un año es bisiesto quedaria asi:

FUNCTION BISIESTO(WANO)
IF MOD(WANO,4)=0 &&ES BISIESTO
WSINO="SI"
IF MOD(WANO,100)=0 .AND. MOD(WANO,400) <> 0 &&NO ES BISIESTO
WSINO="NO"
ENDIF
ENDIF
RETURN WSINO
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:añadir años a campo fecha

Publicado por El Duro (121 intervenciones) el 24/11/2007 17:16:28
Antonio:

Me parece que no es correcta la función, pues si analizas el año 2100 que no es bisiesto tu función retorna que sí porque el resto de dividir 2100 entre 4 te da cero pero en realidad el año 2100 no será bisiesto (Espero vivir lo suficiente para comprobarlo, jejejeje)

La forma en cómo lo hago yo es así:

Si el resto de dividir el año entre 4 es cero y el resto de dividir el año entre 100 es mayor que cero, entonces EL AÑO ES BISIESTO, por ejemplo el año 2008 será bisiesto. ó

Si el resto de dividir el año entre 400 es cero entonces EL AÑO ES BISIESTO como será el caso del año 2100.

Despues de esta larga explicación la función queda así

FUNCTION EsBisiesto(nAmo)
LOCAL lBisiesto := (.F.)
IF MOD(nAmo,4) == 0 .AND. MOD(nAmo,100) > 0
lBisiesto := (.T.)
ELSE
IF MOD(nAmo,400) == 0
lBisiesto := (.T.)
ENDIF
ENDIF
RETURN(.Bisiesto)

El Duro
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:añadir años a campo fecha

Publicado por El Duro (121 intervenciones) el 24/11/2007 17:19:54
Fe de erratas:

La última línea de la funcion DICE RETURN(.Bisiesto)

DEBE DECIR RETURN(lBisiesto)

El Duro
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:añadir años a campo fecha

Publicado por Juan Sotelo (10 intervenciones) el 12/03/2008 15:34:12
wena DURO me funciono....
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