Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   restar fechas (https://www.clubdelphi.com/foros/showthread.php?t=56225)

hugo_Junior 12-05-2008 01:12:54

restar fechas
 
ej:
resultado:=trunc(tdatetimepicker1.date-tdatetimepicker2.date)

Tengo que restar 2 fechas, si yo utilizo trunc,round o daysbetween me da como resultado 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 y 1 mes.
Espero haberme explicado bien, disculpen si repito la pregunta pero es urgente.
El between devuelve los días utilizando el calendario real, y lo que necesito es una función o algo que trabaje de la misma manera.

Caral 12-05-2008 01:18:29

Hola
Aqui hay varias opciones en este ejemplo.
Revisalo.
Saludos

BlueSteel 12-05-2008 01:19:22

Cita:

Empezado por hugo_Junior (Mensaje 285894)
ej:
resultado:=trunc(tdatetimepicker1.date-tdatetimepicker2.date)

Tengo que restar 2 fechas, si yo utilizo trunc,round o daysbetween me da como resultado 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 y 1 mes.
Espero haberme explicado bien, disculpen si repito la pregunta pero es urgente.
El between devuelve los días utilizando el calendario real, y lo que necesito es una función o algo que trabaje de la misma manera.


Creo que en ese caso debes utilizar 2 o 3 criterios..

primero... ver si el dia es igual en ambas fechas... si es así...no hacer nada, de lo contrario sacar la diferencia...

segundo... ver si el mes es igual en ambas fechas...si es así.. no hacer nada, de lo contrario sacar la diferencia...

tercero...realizar el mismo proceso con el año...

no estoy seguro si existen funciones... pero yo lo haria asi...

salu2:p:D

hugo_Junior 12-05-2008 01:34:48

A ver si me explico un poco mejor con éste ejemplo:
var
dd4,a4,d4,m4:integer;

begin
{f_ingreso_4,f_egreso_4(datetimePicker)}
if datos.antiguedad.State in [dsedit, dsinsert]then
datos.AntiguedadF_egreso_4.Value:=f_egreso_4.DateTime;
dd4:=round(f_egreso_4.DateTime - f_ingreso_4.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;
{en el total4 está el error y necesito que sea exacto}

Delphius 12-05-2008 01:42:38

Hola hugo_Junior,
¿Porqué no continuaste tratando el tema en el hilo que iniciaste antes?
No repitas hilos por favor!

Segundo,
Cita:

Empezado por hugo_Junior
pero es urgente

Aqui no nos apures. Se ayuda en lo que uno puede y no siempre estaremos disponibles.

Tercero, usa las etiquetas DELPHI para cuando escribas código.

Por favor respeta la guia de estilo.
Ten un poco más de paciencia. Se que eres nuevo en los foros, pero te voy a pedir que por favor comienza a seguir la guia.

No soy moderador, pero aqui cada uno debe poner su granito.

Saludos,

hugo_Junior 12-05-2008 02:06:23

Pido disculpas si fué tomado como que los estaba apurando, pero la verdad es que nada ver.
Resalte el tema de nuevo porque vi que estaban conectados gente que considero que sabe y como me había quedado colgado el tema.... por eso fué...nada más.
me disculpo nuevamente y gracias por la ayuda.

coso 12-05-2008 02:06:45

DecodeDate(...)

Sacas el dia, mes, año de la primera fecha
Sacas el dia, mes, año de la segunda.
Restas dia-dia, mes-mes, año-año

Delphius 12-05-2008 04:11:13

Inspirado en la idea de Coso, la "cosa":D (1) pasa por esto:

Código Delphi [-]
procedure TForm1.DateDifferenceReal(Date1, Date2: TDateTime; var Days, Months, Years: integer);
var D1, D2, M1, M2, Y1, Y2: word;
begin
  DecodeDate(Date1,Y1,M1,D1);
  DecodeDate(Date2,Y2,M2,D2);

  Days := D1 - D2;
  Months := M1 - M2;
  Years := Y1 - Y2;
end;

procedure TForm1.Button1Click(Sender: TObject);
var Y, M, D: integer;
begin
 DateDifferenceReal(DateTimePicker1.DateTime,DateTimePicker2.DateTime,D,M,Y);

 Edit1.Text := IntToSTr(D);
 Edit2.Text := IntToSTr(M);
 Edit3.Text := IntToSTr(Y);
end;

No es lo que buscas, pero es una aproximación.

(1) Simple coincidencia.:p:)

Saludos,

hugo_Junior 12-05-2008 16:40:09

ese ya lo probé y da error, porque m1 es menor a m2 te da error y si dic 2007 enero 2008 te va a dar un año.
Gracias igual.

coso 12-05-2008 16:55:04

que es lo que quieres saber exactamente? me parece q con los datos que hay ya puedes resolverlo...

Delphius 12-05-2008 17:00:53

Cita:

Empezado por coso (Mensaje 286003)
que es lo que quieres saber exactamente? me parece q con los datos que hay ya puedes resolverlo...

Coso no tiene sentido seguir dandole vueltas. En el hilo inicial donde expuso el tema (este es un duplicado) ya le ofrecieron una solución.

hugo_Junior, ¿ya ves por que te he dicho que no duplicaras hilos? Sería oportuno que un moderador cierre este hilo, si es que lo ven conveniente.

Saludos,

coso 12-05-2008 17:05:17

Prueba con Decodedate(TDateTime(fecha_final-fecha_inicial),d,m,a). Al menos te dara los meses, dias, años de diferencia...es lo que buscabas no? Si lo que buscas es los dias de diferencia tal cual el Round(fecha_final-fecha_inicial) te tendria que funcionar.....
Vaya...Ok delphius acabo de leerlo

hugo_Junior 12-05-2008 17:33:46

Muchísimas gracias a vos y a todos por la ayuda y las molestías.
Disculpas de nuevo por crear un nuevo hilo.
Saludos.


La franja horaria es GMT +2. Ahora son las 03:59:07.

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