Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
Angry 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.
Responder Con Cita
  #2  
Antiguo 05-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 06-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 06-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 11-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
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,ejemplo01/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
Responder Con Cita
  #6  
Antiguo 12-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 12-05-2008 a las 06:28:23.
Responder Con Cita
  #7  
Antiguo 12-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
Con ese ejemplo da perfecto, muchísimas gracias a vos y a todos por la ayuda y las molestías.
Saludos.
Responder Con Cita
  #8  
Antiguo 12-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
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
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #9  
Antiguo 02-01-2013
frod809 frod809 is offline
Registrado
NULL
 
Registrado: dic 2013
Posts: 4
Poder: 0
frod809 Va por buen camino
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,

Última edición por Casimiro Notevi fecha: 02-01-2013 a las 19:51:50.
Responder Con Cita
  #10  
Antiguo 02-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
rpt. manager: meses y días transcurridos entre dos fechas dandia28 Impresión 1 20-02-2008 15:56:08
restar/sumar 3 meses a un datetimepicker Milperrimo Varios 3 17-11-2007 00:50:16
Restar Fechas jsanchez OOP 2 08-02-2006 19:29:55
Restar fechas majosf Conexión con bases de datos 11 16-11-2005 16:27:18
restar dos fechas seken Varios 4 15-08-2003 23:34:56


La franja horaria es GMT +2. Ahora son las 20:09:04.


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
Copyright 1996-2007 Club Delphi