Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Restar fechas(días, meses, años) (https://www.clubdelphi.com/foros/showthread.php?t=56020)

hugo_Junior 05-05-2008 16:10:42

Restar fechas(días, meses, años)
 
tengo que restar dos fechas, una de cuando ingreso y otra cuando se fué para poder sacar la antigüledad, este es el código:
calcular.click
var
dd4,a4,d4,m4:interger;
begin
dd4:=round(f_egreso_1.DateTime - f_ingreso_1.DateTime);
a4:=dd4 div 365;
d4:= dd4 mod 365;
m4:= d4 div 30;
d4:= d4-(m4*30);
total4.Text:= (inttostr(d4)+'días '+inttostr(m4)+'meses '+inttostr(a4)+'años');
end;

El problema es que si resto por ejemplo: 17/04/98 - 17/04/08 tendría que devolverme 0 días 0 meses 10 años y lo que me devuelve son 3 días 0 meses 10 años.
Si bien lo que me devuelve es exacto por la diferencia de días por los meses bisiesto y eso, no me sirve.
Desde ya muchas gracias.

Caro 05-05-2008 16:46:41

Hola Hugo, porque no usas las funciones de la unidad DateUtils, hay varias funciones para realizar operaciones sobre fechas. Como DaysBetween (te da la cantidad de dias entre dos fechas), MonthsBetween, YearBetween...

Saluditos

hugo_Junior 06-05-2008 12:58:26

Disculpa de nuevo, pero no podrías darme un ej; porque ya adicione al proyecto los dateutils pero debo estar usando mal el daysbetween porque me da cualquier cosa 14/03/1431.

Caro 06-05-2008 14:44:36

Hola de nuevo Hugo, te pongo el ejemplo.

Código Delphi [-]
showmessage('Cantidad de dias : '+IntToStr(DaysBetween(f_egreso_1.DateTime, f_ingreso_1.DateTime)));

Lo que te devuelve la función DaysBetween es un entero, al igual que MonthBetWeen, YearBetween.

Saluditos

hugo_Junior 11-05-2008 04:00:34

disculpa que te moleste de nuevo, pero el resultado del daysbetween me da un integer y si yo hago el cálculo de dividir x 365 y luego x30 , me va a seguir dando el mismo error que antes. Porque lo que yo necesito es que si un mes tiene 31 días y el otro 30,ejemplo:(01/02/07 - 01/03/07=1 mes) y con el Between me daría de resultado 1 día 1 mes. Espero haberme explicado mejor, si no es así pido disculpas nuevamente.
Saludos

Caro 12-05-2008 06:21:55

Hola de nuevo hugo, yo me refería a que revisaras las funciones de fecha que tiene DateUtils y te ayudaras con ellas, te pongo un ejemplo.

Código Delphi [-]
var
 Anyos, Meses, Dias : Integer;
 FechaInicio, FechaFin : TDateTime;
begin
 Anyos := YearsBetween(FechaInicio, FechaFin); //Obtenemos la cantidad de años
 if Anyos > 0 then
  FechaInicio := IncYear(FechaInicio, Anyos); //Si existen años, incrementamos esa cantidad de años a nuestra fecha de inicio

 Meses := MonthsBetween(FechaInicio, FechaFin); //Obtenemos la cantidad de meses
 if Meses >0 then
  FechaInicio := IncMonth(FechaInicio, Meses); //Si existen meses, incrementamos esa cantidad de meses a nuestra fecha de inicio

 Dias := DaysBetween(FechaInicio, FechaFin); //Obtenemos la cantidad de dias de lo que queda
 
 showmessage('Años :'+IntToStr(Anyos)+' Meses:'+IntToStr(Meses)+' Dias:'+IntToStr(Dias));

Saluditos

hugo_Junior 12-05-2008 16:44:45

Con ese ejemplo da perfecto, muchísimas gracias a vos y a todos por la ayuda y las molestías.
Saludos.

Caro 12-05-2008 17:30:47

Hola de nuevo hugo, no es ninguna molestia, solo que la siguiente vez no repitas hilos por favor, trata de explicar lo mejor que puedas tu problema y de tener un poco de paciencia, ya que muchos de nosotros no estamos disponibles todo el tiempo.

Saluditos ;)

frod809 02-01-2013 19:36:05

Hola Caro, gracias por el ejemplo, pero en algunas ocasiones falla por un día, tomo de comparación una pagina que hace lo mismo, restar dos fechas,

Casimiro Notevi 02-01-2013 19:51:27

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Este mensaje es de hace unos 5 años, al menos deberías explicar qué te ocurre, qué falla, en qué condiciones, qué código estás usando, etc.

Lee nuestra guía de estilo, gracias.


La franja horaria es GMT +2. Ahora son las 20:23:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi