Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 12-05-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Aqui hay varias opciones en este ejemplo.
Revisalo.
Saludos

Última edición por Caral fecha: 12-05-2008 a las 01:37:58.
Responder Con Cita
  #3  
Antiguo 12-05-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
Empezado por hugo_Junior Ver Mensaje
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
__________________
BlueSteel
Responder Con Cita
  #4  
Antiguo 12-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
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}
Responder Con Cita
  #5  
Antiguo 12-05-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 12-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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

Última edición por coso fecha: 12-05-2008 a las 02:10:37.
Responder Con Cita
  #8  
Antiguo 12-05-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Inspirado en la idea de Coso, la "cosa" (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.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 12-05-2008 a las 04:12:05. Razón: etiquetas delphi
Responder Con Cita
  #9  
Antiguo 12-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
que es lo que quieres saber exactamente? me parece q con los datos que hay ya puedes resolverlo...
Responder Con Cita
  #11  
Antiguo 12-05-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por coso Ver Mensaje
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 12-05-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
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
Responder Con Cita
  #13  
Antiguo 12-05-2008
hugo_Junior hugo_Junior is offline
Miembro
 
Registrado: may 2008
Posts: 19
Poder: 0
hugo_Junior Va por buen camino
Muchísimas gracias a vos y a todos por la ayuda y las molestías.
Disculpas de nuevo por crear un nuevo hilo.
Saludos.
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
restar fechas sql Oraxtar SQL 16 21-01-2008 22:01:44
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 fechas Acker Varios 4 07-11-2005 14:11:51
restar dos fechas seken Varios 4 15-08-2003 23:34:56


La franja horaria es GMT +2. Ahora son las 14:59:30.


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