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?
// \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 / end
acuellar wrote:goosfancito
No es así
Es 21
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 )
// FIN
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.
- Code: Select all Expand view
// \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.
- Code: Select all Expand view
// \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)
Armando wrote:José:
Disculpa mi intromisión, y los años bisiestos?
Saludos
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 46 guests