Hola a todos...
Yo hice esta rutina para calcular la Edad o antigüedad entre dos fechas... Espero les sirva.
*------------------------------------------------------------------------------------------------------------------------------------------------
Hi all ...
I did this routine to calculate the age or seniority between two dates ... I hope they can.
Code: Select all
FUNCTION CalculaEdad(cFechaNaci,cFechaHoy)
LOCAL FechaNaci:= CtoD(cFechaNaci)
LOCAL nAnoNaci := YEAR(FechaNaci)
LOCAL nMesNaci := MONTH(FechaNaci)
LOCAL nDiaNaci := DAY(FechaNaci)
LOCAL nAnoHoy
LOCAL nMesHoy
LOCAL nDiaHoy
LOCAL nDifAnos := 0
LOCAL nDifMeses := 0
LOCAL nDifDias := 0
LOCAL aEdad
LOCAL lAnosMenos := .F.
LOCAL aMesesDias := {}
LOCAL aBisiestos := {1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000, 2004, 2008,2012,2016,2020,2024,2028,2032,2036,2040,2044,2048,2052,2056,2060,2064,2068,2076,2080,2084,2088,2092,2096,2100}
LOCAL lBisiesto := .F.
IF PCOUNT()=0
MsgBox("Falta un parametro String Tipo Fecha '01/01/1900'")
RETURN NIL
ELSEIF PCOUNT()=1
nAnoHoy := YEAR(DATE())
nMesHoy := MONTH(DATE())
nDiaHoy := DAY(DATE())
ELSEIF PCOUNT()=2
nAnoHoy := YEAR(CtoD(cFechaHoy))
nMesHoy := MONTH(CtoD(cFechaHoy))
nDiaHoy := DAY(CtoD(cFechaHoy))
ENDIF
IF PosiArray(aBisiestos,nAnoNaci) != 0
lBisiesto := .T.
ENDIF
AADD(aMesesDias,{1,'ENERO',31})
AADD(aMesesDias,{2,'FECBRERO',IIF(lBisiesto,29,28)})
AADD(aMesesDias,{3,'MARZO',31})
AADD(aMesesDias,{4,'aBRIL',30})
AADD(aMesesDias,{5,'MAYO',31})
AADD(aMesesDias,{6,'JINIO',30})
AADD(aMesesDias,{7,'JULIO',31})
AADD(aMesesDias,{8,'AGOSTO',31})
AADD(aMesesDias,{9,'SEPTIEMBRE',30})
AADD(aMesesDias,{10,'OCTUBRE',31})
AADD(aMesesDias,{11,'NOVIEMBRE',30})
AADD(aMesesDias,{12,'DICIEMBRE',31})
*--------------------------------------------PARA CALCULAR LOS AÑOS
IF nMesNaci < nMesHoy
nDifAnos := nAnoHoy - nAnoNaci
ELSEIF nMesNaci == nMesHoy
nDifAnos := nAnoHoy - nAnoNaci
ELSEIF nMesNaci > nMesHoy
nDifAnos := (nAnoHoy - nAnoNaci)-1
lAnosMenos := .T.
ENDIF
*------------------------------------PARA CALCULAR LOS MESES Y DÍAS
IF nMesNaci < nMesHoy
nDifMeses := (nMesHoy - nMesNaci)
nDifDias := Abs(nDiaHoy - nDiaNaci)
ELSEIF nMesNaci == nMesHoy
IF nDiaNaci < nDiaHoy
nDifMeses := nMesHoy - nMesNaci
nDifDias := nDiaHoy - nDiaNaci
ELSEIF nDiaNaci == nDiaHoy
nDifMeses := nMesHoy - nMesNaci
nDifDias := 0
ELSEIF nDiaNaci > nDiaHoy
nDifMeses := nMesHoy-1
lMesesMenos:= .T.
nDifDias := IIF(nMesNaci=1,aMesesDias[12][3]-nDiaNaci + nDiaHoy,aMesesDias[nMesNaci-1][3]-nDiaNaci + nDiaHoy)
ENDIF
ELSEIF nMesNaci > nMesHoy
nDifMeses := (12-nMesNaci)+nMesHoy
nDifDias := Abs(nDiaHoy - nDiaNaci)
ENDIF
aEdad:= {nDifAnos,nDifMeses,nDifDias}
RETURN aEdad