FoxPro/Visual FoxPro - RESTAR FECHAS

   
Vista:

RESTAR FECHAS

Publicado por sebastian (244 intervenciones) el 13/09/2010 17:20:57
Hola programadores necesito restar dos fechas pero que me muestre los meses si es posible tambien los dias, por ejemplo 01/05/2010 - 02/09/2010 = 4 M, 1 D. 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:RESTAR FECHAS

Publicado por es_binario (757 intervenciones) el 13/09/2010 18:26:03
Aqui esta un link, directamente no esta lo que deseas pero te dice cuantos dias tiene un mes y asi tu recorres los meses que hay entre tus 2 fechas y despues le pones los dias adicionales, asi de facil, tendras que pensarle un poco pero nada que no puedas resolver.

el link de las funcones.
http://www.portalfox.com/index.php?name=News&file=article&sid=1162&mode=nested&order=0&thold=0
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:RESTAR FECHAS

Publicado por Juanma Cruz (508 intervenciones) el 13/09/2010 19:21:24
Que tal una funcion como:

Function MesesDias
Lparameters Alfa, Omega
Local nMeses as Integer, nResto as Integer, cResultado as String
Store 0 to nMeses, nResto
Store "" to cResultado
Do while Gomonth(alfa,1)<omega
nMeses= nMeses+1
alfa= Gomonth(alfa,1)
EndDo
nResto= Omega-Alfa
Text to cResultado textmerge noshow pretext 7
<<Alltrim(Str(nMeses,10,0))>>M <<Alltrim(Str(nResto,10,0))>>D
EndText
Return (cResultado)


Donde

Alfa: Fecha Inicial
Omega= Fecha final

Devuelve una cadena de texto con los meses y días.
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:RESTAR FECHAS

Publicado por VICTOR PEREZ (278 intervenciones) el 16/09/2010 02:18:40
Me parece fantastico la funcion de JuanMa Cruz. Ya la probe y me funciono bien, claro que cambie lo de TEXT EndTEXT pues no me mostraba el resultado.

Yo uso una rutina para calcular la EDAD de mis pacientes. Tengo pacientes desde 7 dias hasta muchos años.

Esta es mi rutina

EDAD=0
edad1=0

EDAD= ((DATE() - m.nacimiento)/ 365.25)

If INT(edad) < 1
edad1 = (edad * 12)
endif


if edad1 <>0
if int(edad1)=0
edad1=edad*365.25
sedad= ltrim(str(int(edad1))) + " DIAS"
else
sedad= ltrim(str(INT(edad1))) + " MESES "
endif
endif

IF INT(EDAD) >= 1 .AND. INT(EDAD) <= 5
IF (EDAD - INT(EDAD)) = 0
sedad= ltrim(str(INT(edad))) + " AÑOS "
ENDIF

IF INT((EDAD - INT(EDAD)*5)) <>0

IF (INT((EDAD - INT(EDAD))*12)) > 1
sedad= ltrim(str(INT(edad))) + " " + LTRIM(STR(INT((EDAD - INT(EDAD))*12))) + "/12 AÑOS"
ELSE
IF INT(EDAD) = 1
sedad= ltrim(str(INT(edad))) + " AÑO"
ELSE
sedad= ltrim(str(INT(edad))) + " AÑOS"
ENDIF
ENDIF

ELSE
sedad= ltrim(str(INT(edad))) + " Y " + LTRIM(STR(INT((EDAD - INT(EDAD))*12*30))) + " DIAS"
ENDIF

ELSE
if int(edad) >= 5
sedad= ltrim(str(INT(edad))) + " AÑOS"
endif
ENDIF

Donde m.nacimiento es la fecha de nacimiento del paciente tomado del formulario donde se introducen los datos de los nuevos pacientes.

Esta rutina la coloco en el evento LostFocus del campo nacimiento. Y la informacion se guarda en la variable "sedad".

Claro que este programita lo hice para mi clinica porque me interesa conocer si es mayor de "X" años la edad en Años. Si es menor de "X" años la Edad en Años y meses ...y si es menor de 1 año la edad en meses.

Prueba poniendo varias fechas de nacimiento y veras los resultados...

Saludos,.
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:RESTAR FECHAS

Publicado por Juanma Cruz (508 intervenciones) el 16/09/2010 11:02:57
¡¿Cómorrrr que no el Text /EndText no te daba resultado?! La acabo de probar y funciona, jejeje.

Claro, como la definí como función, no funciona por sí sola, devuelve un resultado.

Así puedes usarla dentro de un programa, tantas veces como sea necesario, dándole los parámetros que gustes.
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:RESTAR FECHAS

Publicado por victor perez (278 intervenciones) el 17/09/2010 01:07:57
HOla,

Creo que fue un error mio al implementar la funcion directa. Es decir, no usarla como funcion , sino como un PRG.

Saludos,
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:RESTAR FECHAS

Publicado por VICTOR PEREZ (278 intervenciones) el 16/09/2010 02:18:41
Me parece fantastico la funcion de JuanMa Cruz. Ya la probe y me funciono bien, claro que cambie lo de TEXT EndTEXT pues no me mostraba el resultado.

Yo uso una rutina para calcular la EDAD de mis pacientes. Tengo pacientes desde 7 dias hasta muchos años.

Esta es mi rutina

EDAD=0
edad1=0

EDAD= ((DATE() - m.nacimiento)/ 365.25)

If INT(edad) < 1
edad1 = (edad * 12)
endif


if edad1 <>0
if int(edad1)=0
edad1=edad*365.25
sedad= ltrim(str(int(edad1))) + " DIAS"
else
sedad= ltrim(str(INT(edad1))) + " MESES "
endif
endif

IF INT(EDAD) >= 1 .AND. INT(EDAD) <= 5
IF (EDAD - INT(EDAD)) = 0
sedad= ltrim(str(INT(edad))) + " AÑOS "
ENDIF

IF INT((EDAD - INT(EDAD)*5)) <>0

IF (INT((EDAD - INT(EDAD))*12)) > 1
sedad= ltrim(str(INT(edad))) + " " + LTRIM(STR(INT((EDAD - INT(EDAD))*12))) + "/12 AÑOS"
ELSE
IF INT(EDAD) = 1
sedad= ltrim(str(INT(edad))) + " AÑO"
ELSE
sedad= ltrim(str(INT(edad))) + " AÑOS"
ENDIF
ENDIF

ELSE
sedad= ltrim(str(INT(edad))) + " Y " + LTRIM(STR(INT((EDAD - INT(EDAD))*12*30))) + " DIAS"
ENDIF

ELSE
if int(edad) >= 5
sedad= ltrim(str(INT(edad))) + " AÑOS"
endif
ENDIF

Donde m.nacimiento es la fecha de nacimiento del paciente tomado del formulario donde se introducen los datos de los nuevos pacientes.

Esta rutina la coloco en el evento LostFocus del campo nacimiento. Y la informacion se guarda en la variable "sedad".

Claro que este programita lo hice para mi clinica porque me interesa conocer si es mayor de "X" años la edad en Años. Si es menor de "X" años la Edad en Años y meses ...y si es menor de 1 año la edad en meses.

Prueba poniendo varias fechas de nacimiento y veras los resultados...

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