SET PROCEDURE TO calc_edad.prg
DECLARE laYMD(1)
? pertoymd( @laYMD, {^1969/11/25}, DATE() )
DISPLAY MEMORY LIKE laYMD
PROCEDURE pertoymd && (PeriodToYMD) Devuelve la cantidad de años, meses y días entre 2 fechas dadas. Paráms: @aYMD, dFechaD [,dFechaH] [,cTipoCalc]. NOTA: aYMD=array con años, meses y días. Si se indica YMD, PerToYMD devuelve años y decimas.
*********************************************************************************************************
*-- Devuelve la cantidad de años, meses o días que hay entre 2 fechas.
*-- Metodología:
*-- 1) Calculo los meses y dias hasta fin de año origen
*-- 2) Calculo los años intermedios entre las fechas origen y destino
*-- 3) Calculo los meses y dias desde principio de año destino
*-- 4) Redondeo los dias y meses restantes a años y meses si es posible
*********************************************************************************************************
* taDatos : Tiene doble función:
* -Si se pasa por referencia, se devuelve un array con el resultado. *
* col.1=Años, col.2=meses, col.3=días *
* -Si se pasa "Y", "M", o "D" se devuelve el resultado de años, meses o días del cálculo. *
* tdFechaDesde : Fecha desde la cuál comenzar el cálculo
* tdFechaHasta : (opc) Fecha final, Si no se indica se asume hoy.
*********************************************************************************************************
LPARAMETERS taDatos, tdFechaDesde, tdFechaHasta
LOCAL lnRetorno, lnDias, lnAño, lnMes, lnDiasAños, lnDiasMeses, lnAños, lnMeses, lnDiaOrigen, lnMesOrigen, ;
lnAñoOrigen, lnAñoOrigen2, lnDiaDestino, lnMesDestino, lnAñoDestino, lnAñoDestino2, lcYMD, lnDOM
IF TYPE( "ALEN(taDatos, 1)" ) # "N"
*-- No es un array
lcYMD = taDatos
ELSE
*-- Es un array
DECLARE taDatos(3)
lcYMD = ALEN(taDatos, 1)
ENDIF
IF EMPTY(tdFechaHasta)
tdFechaHasta = DATE()
ENDIF
*-- Inicio nueva función
lnDias = tdFechaHasta - tdFechaDesde
lnAños = ROUND(lnDias / 365.25, 0)
IF GOMONTH(tdFechaDesde, lnAños * 12) > tdFechaHasta
lnAños = lnAños - 1
ENDIF
FOR lnMeses = 1 TO 12
IF GOMONTH(tdFechaDesde, lnAños * 12 + lnMeses) > tdFechaHasta
lnMeses = lnMeses - 1
EXIT
ENDIF
ENDFOR
lnDias = tdFechaHasta - GOMONTH(tdFechaDesde, lnAños * 12 + lnMeses)
*-- Fin nueva función
*-- Asigno los resultados
IF VARTYPE(lcYMD) # "C"
lnRetorno = lnAños + lnMeses / 12
taDatos(1) = lnAños
taDatos(2) = lnMeses
taDatos(3) = lnDias
ELSE
DO CASE
CASE lcYMD = "Y"
lnRetorno = lnAños
CASE lcYMD = "M"
lnRetorno = lnMeses
CASE lcYMD = "D"
lnRetorno = lnDias
ENDCASE
ENDIF
RETURN lnRetorno
ENDPROC
PROCEDURE CalcularEdad
LPARAMETERS tdFecha1,tdFecha2
*!* ----------------------------------------------------------------
*!* Autor: Fidel Charny (y los otros?!? )
*!* tdFecha1 Fecha inferior (nacimiento)
*!* tdFecha2 Fecha superior (día de cálculo) * Default=Date()
*!* Devuelve un objeto con las prop: dias,meses,años y tiempo (C)
*!* ----------------------------------------------------------------
tdFecha2=EVL(tdFecha2,DATE())
LOCAL lnAnos,lnMeses,lnDias,lnAno2,lnMes2,lnDia1,lnDia2,;
objEmpty,lcString,ldTrans
* Verificar tdFEcha1 <= tdFEcha2
IF tdFEcha1 > tdFecha2
ldTrans=tdFEcha1
tdFecha1 = tdFEcha2
tdFecha2 = ldTrans
ENDIF
lnAnos =Year(tdFecha2)-Year(tdFecha1) - 1
lnMeses =12-Month(tdFecha1) + Month(tdFecha2) - 1
do case
case Day(tdFecha1) = Day(tdFecha2)
lnMeses = lnMeses+1
case Day(tdFecha2) > Day(tdFecha1)
lnMeses = lnMeses + 1
case Day(tdFecha2) < Day(tdFecha1)
* lnMeses = lnMeses
endcase
if lnMeses >= 12
lnMeses =lnMeses - 12
lnAnos =lnAnos + 1
endif
if Day(tdFecha1)=Day(tdFecha2)
lnDias =0
else
lnDia1 =Day(tdFecha1)
lnDia2 =Day(tdFecha2)
if Day(tdFecha2) > Day(tdFecha1)
lnDias =Day(tdFecha2)-Day(tdFecha1)
else
lnMes2 =month(tdFecha2)-1
lnAno2 =Year(tdFecha2)
if lnMes2 = 0
lnMes2 =12
lnAno2 =lnAno2-1
endif
lnDias =lnDia2 + DAY(Gomonth( Date( lnAno2 , lnMes2, 1) , 1) - 1) - lnDia1
endif
endif
lcString=TRANSFORM(lnAnos) + " Año" + IIF(lnAnos > 1,"s","")+ ", ";
+TRANSFORM(lnMeses) + " Mes" + IIF(lnMeses > 1,"es","")+ ", ";
+TRANSFORM(lnDias) + " Dia" + IIF(lnDias > 1,"s","")
objEmpty=NEWOBJECT("Empty")
ADDPROPERTY(objEmpty,"Tiempo",lcString)
ADDPROPERTY(objEmpty,"Años",lnAnos)
ADDPROPERTY(objEmpty,"Meses",lnMeses)
ADDPROPERTY(objEmpty,"Dias",lnDias)
REturn objEmpty
--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.