Fecha de inicio (DD/MM/AAAA): 29/01/1905
Fecha final (DD/MM/AAAA): 02/10/1926
Cantidad de años: 20
esto es asi?
Fecha de inicio (DD/MM/AAAA): 29/01/1905
Fecha final (DD/MM/AAAA): 02/10/1926
Cantidad de años: 20
esto es asi?
goosfancito
No es así
Es 21
// \samples\somadat.prg
#Include "FiveWin.ch"
FUNCTION Main()
/*
Fecha de inicio (DD/MM/AAAA): 29/01/1905
Fecha final (DD/MM/AAAA): 02/10/1926
Cantidad de años: 20
esto es asi?
*/
LOCAL FechaIni, FechaFin, nSumaFecha
SET CENTURY ON
SET DATE BRITISH
SET EPOCH TO YEAR( DATE() ) - 30
FechaIni := CTOD( "29/01/1905" )
FechaFin := CTOD( "02/01/1926" )
nSumaFecha := 0
nSumaFecha := Converte_Edad( FechaIni, FechaFin )
? nSumaFecha
RETURN NIL
FUNCTION Converte_Edad( FechaIni, FechaFin )
LOCAL Calc_Edad
Calc_Edad := 0.00
Calc_Edad := INT( ( FechaFin - FechaIni ) ) / 365
RETURN( Calc_Edad )
// fin / endacuellar wrote:goosfancito
No es así
Es 21
por eso mismo tengo la duda, para mi es como dice Karinha.
pueden verificarlo?
karinha wrote:acuellar wrote:goosfancito
No es así
Es 21
Adhemar, porquê? No és 20 años, 9 meces y cuatro dias? +- eso. jajajajajajaja.
Saludos.
SELECT TIMESTAMPDIFF(YEAR, '1905-01-29','1926-10-02') AS ANIOS // Candidad de años -> Resultado 21
SELECT TIMESTAMPDIFF(MONTH, '1905-01-29','1926-10-02') AS MESES // Cantidad de meses -> Resultado 260
SELECT TIMESTAMPDIFF(DAY, '1905-01-29','1926-10-02') AS DIAS // Cantidad de días -> Resultado 7916// \samples\IDADE.PRG
// função que retorna o tempo de vida, ou tempo de cadastro, etc, no formato
// ano:mes:dia
#Include "FiveWin.ch"
FUNCTION Main()
LOCAL Edade, Dt_Nasc, FechaIni, FechaFin
SET CENTURY ON
SET DATE BRITISH
SET EPOCH TO YEAR( DATE() ) - 30
Dt_Nasc := CTOD( "08/08/1963" )
FechaIni := CTOD( "29/01/1905" )
FechaFin := CTOD( "02/01/1926" )
// Edade := _Tempo( Dt_Nasc, Date() )
Edade := _Tempo( FechaIni, FechaFin )
? Edade // -> 20 anos, once meces y 5 dias. aun no es 21 anos.
// -> En: "29/01/1926" -> completara 21 anos. Perfecto?
RETURN NIL
FUNCTION _TEMPO( AA, BB )
LOCAL D, M, A, DD, LA, LM, DD1, HH
STORE 0 TO A, M, D
IF ( Year( BB ) - Year( AA ) ) > 1 .OR. ( ( BB - AA ) + 1 ) > 364
DD := CToD( Left( DToC( AA ), 6 ) + Right( DToC( BB ), 4 ) )
IF DToS( DD ) > DToS( BB )
DD := CToD( Left( DToC( DD ), 6 ) + StrZero( Val( Right( DToC( DD ), 4 ) ) - 1, 4 ) )
ENDIF
A := Year( DD ) - Year( AA )
IF Year( DD ) = Year( BB ) .AND. ( Month( BB ) - Month( DD ) ) > 1
M := ( Month( BB ) - Month( DD ) ) - 1
ELSEIF Year( BB ) > Year( DD )
M := ( 12 - Month( DD ) ) + Month( BB ) - 1
ENDIF
LA := Year( DD )
LM := Month( DD ) + 1
IF LM > 12
LM := 1
LA := LA + 1
ENDIF
DD1 := CToD( "01/" + StrZero( LM, 2 ) + "/" + StrZero( LA, 4 ) ) - 1
D := Day( BB ) + ( Day( DD1 ) - Day( DD ) ) + 1
IF D >= 30
LA := Int( D / 30 )
D := D - ( LA * 30 )
M := M + 1
IF M > 12
M := 0
A := A + 1
ENDIF
ENDIF
ELSE
A := 0
IF Year( AA ) = Year( BB ) .AND. ( Month( BB ) - Month( AA ) ) > 1
M := ( Month( BB ) - Month( AA ) ) - 1
ELSEIF Year( BB ) > Year( AA )
M := ( 12 - Month( AA ) ) + Month( BB ) - 1
ENDIF
LA := Year( AA )
LM := Month( AA ) + 1
IF LM > 12
LM := 1
LA := LA + 1
ENDIF
DD1 := CToD( "01/" + StrZero( LM, 2 ) + "/" + StrZero( LA, 4 ) ) - 1
D := Day( BB ) + ( Day( DD1 ) - Day( AA ) ) + 1
IF D >= 30
LA := Int( D / 30 )
D := D - ( LA * 30 )
M := M + 1
IF M > 12
M := 0
A := A + 1
ENDIF
ENDIF
ENDIF
HH := Str( A, 3 ) + ":" + Str( M, 2 ) + ":" + Str( D, 2 )
RETURN( HH )
// FINkarinha
El tema es que en la pregunta original, dice 29/10/1926 (Noviembre) en tu función estás poniendo Enero. ![]()
És verdad. 1000 desculpas. jajajajajajajaja.
Regards, saludos.
karinha wrote:No estoy de acuerdo con tu lógica y vuelvo a intentarlo: 20 años, once meses y 5 días. 21 años, solo en: 29/01/1926.
// \samples\IDADE.PRG // função que retorna o tempo de vida, ou tempo de cadastro, etc, no formato // ano:mes:dia #Include "FiveWin.ch" FUNCTION Main() LOCAL Edade, Dt_Nasc, FechaIni, FechaFin SET CENTURY ON SET DATE BRITISH SET EPOCH TO YEAR( DATE() ) - 30 Dt_Nasc := CTOD( "08/08/1963" ) FechaIni := CTOD( "29/01/1905" ) FechaFin := CTOD( "02/01/1926" ) // Edade := _Tempo( Dt_Nasc, Date() ) Edade := _Tempo( FechaIni, FechaFin ) ? Edade // -> 20 anos, once meces y 5 dias. aun no es 21 anos. // -> En: "29/01/1926" -> completara 21 anos. Perfecto? RETURN NIL FUNCTION _TEMPO( AA, BB ) LOCAL D, M, A, DD, LA, LM, DD1, HH STORE 0 TO A, M, D IF ( Year( BB ) - Year( AA ) ) > 1 .OR. ( ( BB - AA ) + 1 ) > 364 DD := CToD( Left( DToC( AA ), 6 ) + Right( DToC( BB ), 4 ) ) IF DToS( DD ) > DToS( BB ) DD := CToD( Left( DToC( DD ), 6 ) + StrZero( Val( Right( DToC( DD ), 4 ) ) - 1, 4 ) ) ENDIF A := Year( DD ) - Year( AA ) IF Year( DD ) = Year( BB ) .AND. ( Month( BB ) - Month( DD ) ) > 1 M := ( Month( BB ) - Month( DD ) ) - 1 ELSEIF Year( BB ) > Year( DD ) M := ( 12 - Month( DD ) ) + Month( BB ) - 1 ENDIF LA := Year( DD ) LM := Month( DD ) + 1 IF LM > 12 LM := 1 LA := LA + 1 ENDIF DD1 := CToD( "01/" + StrZero( LM, 2 ) + "/" + StrZero( LA, 4 ) ) - 1 D := Day( BB ) + ( Day( DD1 ) - Day( DD ) ) + 1 IF D >= 30 LA := Int( D / 30 ) D := D - ( LA * 30 ) M := M + 1 IF M > 12 M := 0 A := A + 1 ENDIF ENDIF ELSE A := 0 IF Year( AA ) = Year( BB ) .AND. ( Month( BB ) - Month( AA ) ) > 1 M := ( Month( BB ) - Month( AA ) ) - 1 ELSEIF Year( BB ) > Year( AA ) M := ( 12 - Month( AA ) ) + Month( BB ) - 1 ENDIF LA := Year( AA ) LM := Month( AA ) + 1 IF LM > 12 LM := 1 LA := LA + 1 ENDIF DD1 := CToD( "01/" + StrZero( LM, 2 ) + "/" + StrZero( LA, 4 ) ) - 1 D := Day( BB ) + ( Day( DD1 ) - Day( AA ) ) + 1 IF D >= 30 LA := Int( D / 30 ) D := D - ( LA * 30 ) M := M + 1 IF M > 12 M := 0 A := A + 1 ENDIF ENDIF ENDIF HH := Str( A, 3 ) + ":" + Str( M, 2 ) + ":" + Str( D, 2 ) RETURN( HH ) // FIN
Regards, saludos.
goosfancito wrote:karinha wrote:No estoy de acuerdo con tu lógica y vuelvo a intentarlo: 20 años, once meses y 5 días. 21 años, solo en: 29/01/1926.
// \samples\IDADE.PRG // função que retorna o tempo de vida, ou tempo de cadastro, etc, no formato // ano:mes:dia #Include "FiveWin.ch" FUNCTION Main() LOCAL Edade, Dt_Nasc, FechaIni, FechaFin SET CENTURY ON SET DATE BRITISH SET EPOCH TO YEAR( DATE() ) - 30 Dt_Nasc := CTOD( "08/08/1963" ) FechaIni := CTOD( "29/01/1905" ) FechaFin := CTOD( "02/01/1926" ) // Edade := _Tempo( Dt_Nasc, Date() ) Edade := _Tempo( FechaIni, FechaFin ) ? Edade // -> 20 anos, once meces y 5 dias. aun no es 21 anos. // -> En: "29/01/1926" -> completara 21 anos. Perfecto? RETURN NIL FUNCTION _TEMPO( AA, BB ) LOCAL D, M, A, DD, LA, LM, DD1, HH STORE 0 TO A, M, D IF ( Year( BB ) - Year( AA ) ) > 1 .OR. ( ( BB - AA ) + 1 ) > 364 DD := CToD( Left( DToC( AA ), 6 ) + Right( DToC( BB ), 4 ) ) IF DToS( DD ) > DToS( BB ) DD := CToD( Left( DToC( DD ), 6 ) + StrZero( Val( Right( DToC( DD ), 4 ) ) - 1, 4 ) ) ENDIF A := Year( DD ) - Year( AA ) IF Year( DD ) = Year( BB ) .AND. ( Month( BB ) - Month( DD ) ) > 1 M := ( Month( BB ) - Month( DD ) ) - 1 ELSEIF Year( BB ) > Year( DD ) M := ( 12 - Month( DD ) ) + Month( BB ) - 1 ENDIF LA := Year( DD ) LM := Month( DD ) + 1 IF LM > 12 LM := 1 LA := LA + 1 ENDIF DD1 := CToD( "01/" + StrZero( LM, 2 ) + "/" + StrZero( LA, 4 ) ) - 1 D := Day( BB ) + ( Day( DD1 ) - Day( DD ) ) + 1 IF D >= 30 LA := Int( D / 30 ) D := D - ( LA * 30 ) M := M + 1 IF M > 12 M := 0 A := A + 1 ENDIF ENDIF ELSE A := 0 IF Year( AA ) = Year( BB ) .AND. ( Month( BB ) - Month( AA ) ) > 1 M := ( Month( BB ) - Month( AA ) ) - 1 ELSEIF Year( BB ) > Year( AA ) M := ( 12 - Month( AA ) ) + Month( BB ) - 1 ENDIF LA := Year( AA ) LM := Month( AA ) + 1 IF LM > 12 LM := 1 LA := LA + 1 ENDIF DD1 := CToD( "01/" + StrZero( LM, 2 ) + "/" + StrZero( LA, 4 ) ) - 1 D := Day( BB ) + ( Day( DD1 ) - Day( AA ) ) + 1 IF D >= 30 LA := Int( D / 30 ) D := D - ( LA * 30 ) M := M + 1 IF M > 12 M := 0 A := A + 1 ENDIF ENDIF ENDIF HH := Str( A, 3 ) + ":" + Str( M, 2 ) + ":" + Str( D, 2 ) RETURN( HH ) // FIN
Regards, saludos.
Kari,
Es que nacio en enero de 29/01/1905 y a octubre de 1926 se cumple entonces 21 años. o sea, el 29/1/1926 cumplio los 21 años
local dFechaA, dFechaB, nYears, nMeses, nDias
dFechaA := cTod('29/01/1905')
dFechaB := cTod('02/10/1926')
nYears := (dFechaB-dFechaA)/365
nMeses := nYears-Int(nYears)
nMeses := nMeses*12
nDias := nMeses-Int(nMeses)
nDias := nDias*30
nYears := Int(nYears)
nMeses := Int(nMeses)
nDias := Int(nDias)
msginfo(nYears)
msginfo(nMeses)
msginfo(nDias)José:
Disculpa mi intromisión, y los años bisiestos?
Saludos
Armando wrote:José:
Disculpa mi intromisión, y los años bisiestos?
Saludos