PROCEDURE calcula_meses_anos( nFchIni, nFchFin, nVarAno, nVarMes, oGetAno, oGetMes )
LOCAL nMeses := nAnos := 0
* nFchIni -> FCH.INICIAL MENOR
* nFchFin -> FCH.FINAL MAYOR
* nVarAno -> VAR Q GUARDA VALOR EN AÑOS
* nVarMes -> VAR Q GUARDA VALOR EN MESES
* oGetAno -> GET CONTENEDOR VALOR EN AÑOS
* oGetMes -> GET CONTENEDOR VALOR EN AÑOS
nAnos := Year( nFchFin ) - Year( nFchIni )
/*
SI MES 1RA FCHA ES MAYOR A MES 2DA FCHA LE RESTO A nAnos 1
Y LA CANTIDAD DE MESES SERIAN 12 MENOS MES 1RA FCHA + MES 2DA FCHA
SI MES 1RA FCHA ES MENOR O IGUAL A MES 2DA FCHA, nAnos QUEDA IGUAL
Y MESES SERIAN MES 2DA FCHA - MES 1RA FCHA
*/
IF Month( nFchIni ) > Month( nFchFin )
nAnos := nAnos - 1
nMeses := ( 12 - Month( nFchIni ) ) + Month( nFchFin )
ELSE
nMeses := Month( nFchFin ) - Month( nFchIni )
ENDIF
IF Year( nFchIni ) == Year( nFchFin )
nAnos := 0
nMeses := Month( nFchFin ) - Month( nFchIni )
ENDIF
//
nVarAno := nAnos
nVarMes := nMeses
oGetAno:REFRESH()
oGetMes:REFRESH()
RETURN
# include "fivewin.ch"
Function Main ()
Local dfecha1 := ""
Local sEdad := ""
Local sDias := ""
SET DATE TO ANSI
SET CENTURY ON
dFecha1 := DATE ()
DEFINE DIALOG oDlg FROM 000, 000 TO 300, 260 PIXEL ;
TITLE "Edad entre dos fechas"
@ 005, 010 SAY "Fecha de Nacimiento" SIZE 070, 14 PIXEL OF oDlg COLOR nRGB ( 016, 016, 240 ), nRGB ( 240, 240, 240 )
@ 005, 080 DTPICKER odfecha1 VAR dfecha1 SIZE 050, 14 PIXEL OF oDlg COLOR nRGB ( 240, 240, 240 ), nRGB ( 240, 016, 016 ) ;
MESSAGE "Digite la fecha de nacimiento"
@ 020, 010 BUTTON "Calcule" SIZE 030, 014 PIXEL OF oDlg ;
ACTION ( sEdad := DFechas ( dFecha1, "0" ), osEdad:Refresh (),;
sDias := DFechas ( dFecha1, "1" ), osDias:Refresh () )
@ 040, 010 SAY osEdad VAR sEdad SIZE 200, 14 PIXEL OF oDlg COLOR nRGB ( 016, 016, 240 ), nRGB ( 240, 240, 240 )
@ 054, 010 SAY osDias VAR sDias SIZE 200, 14 PIXEL OF oDlg COLOR nRGB ( 016, 016, 240 ), nRGB ( 240, 240, 240 )
ACTIVATE DIALOG oDlg
Return ( NIL )
* -------------------------------------------------------------------------------------------------------------- *
* -------------------------------------------------------------------------------------------------------------- *
Function DFechas ( DA, cViene ) && Calcular una Edad desde una fecha a la actualidad en años.meses.dias
Local nDias, nAnos, nMeses
Local Dias_ano := 365.28
Local Dias_Mes := 30
Default cViene := "0" && 0 := sin días calculados, 1 := con los días calculados
nDias := DATE () - DA && Diferencia de Días entre DATE y una Fecha dada 2013.08.25 - 1957.03.04 := 20628 := 56 años, 5 meses, 3 semanas
nAnos := INT ( nDias / Dias_ano ) && Cuantos años hay entre esos dias de diferencia 56
nDias1 := nDias - ( nAnos * Dias_ano ) && Días sobrantes 132
nMeses := INT ( nDias1 / Dias_Mes ) && Cuantos meses hay en esos días sobrantes
nDias2 := nDias1 - ( nMeses * Dias_Mes ) && Días sobrantes
Return ( IIF ( cViene = "1", TRANSFORM ( nDias, "999,999" ) + " días, ", "" ) + ;
TRANSFORM ( nAnos, "9,999" ) + " años, " + ;
TRANSFORM ( nMeses, "99" ) + " meses, " + ;
TRANSFORM ( nDias2, "99" ) + " días" )
* -------------------------------------------------------------------------------------------------------------- *
*
*
*
*
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 81 guests