PDA

Ver la Versión Completa : Comparar fechas


Jucho69
27-01-2011, 15:01:16
Hola amigos

Tengo una pequeña dificultad y no he logrado resolverla, ¿como se puede comparar dos fechas que estén almacenadas, digamos, en dos TEdit o Tlabel y definit cual es más actual o viceversa?

Saludos y gracias

Aleca
27-01-2011, 15:13:43
StrToDate(Edi1.Text) > StrToDate(Edi2.Text)

DateToStr(Fecha) pasa de fecha a texto.:)

rgstuamigo
27-01-2011, 15:19:32
Pues teniendo los datos(correctamente) en los respectivos edit pues podemos hacer ésto en un Boton:
procedure TForm1.Button1Click(Sender: TObject);
begin
if StrToDate(Edit1.Text)>StrToDate(Edit2.Text) then
ShowMessage('La fecha del Edit1 es mayor')
else if StrToDate(Edit1.Text)<StrToDate(Edit2.Text) then
ShowMessage('La fecha del Edit2 es mayor')
else
ShowMessage('Las dos fechas son iguales');
end;

UN CONSEJO En delphi existe controles(componentes) específicos para manejo de fechas y hora, especifiacmente estoy hablando del componente TDateTimePicker que se encuentra en la pestaña Win32 de la paleta de componentes; creo que es mucho mejor usar dos DateTimePicker en ves de los dos edits y así nos evitamos el estar usando la funcion StrToDate, sabiendo que el usuario puede escribir mal el formato de la fecha;)
Saludos...:)
Saludos...:)

Jucho69
27-01-2011, 16:54:10
Hola Aleka y rgstuamigo

Es un gusto contactar con ustedes ya que me han ayudado varias veces, es cierto, el componente DateTimePicker es ideal para eso y lo he usado pero he tenido que hacer codigos innecesarios como este para separar los datos de las fechas

procedure TForm5.DateTimePicker1CloseUp(Sender: TObject);
var t0,t1,t2,r0,r1,r2,f:string; dia1,dia2,mes1,mes2,ano1,ano2,f1:integer;
begin
dxButton4.Enabled:=true;
label10.Caption:=(DateToStr(DateTimePicker1.date));
label11.Caption:=(DateToStr(DateTimePicker2.date));
t0:=label10.Caption;delete(t0,3,10);
t1:=label10.Caption;delete(t1,1,3);delete(t1,3,10);
t2:=label10.Caption;delete(t2,1,6);
r0:=label11.Caption;delete(r0,3,10);
r1:=label11.Caption;delete(r1,1,3);delete(r1,3,10);
r2:=Form1.ComboBox5.Text;
dia1:=strtoint(t0); dia2:=strtoint(r0);
mes1:=strtoint(t1); mes2:=strtoint(r1);
ano1:=strtoint(t2);ano2:=strtoint(r2);

Gracias y me pondré a rectificar lo anterior

Saludos

rgstuamigo
27-01-2011, 18:50:07
... es cierto, el componente DateTimePicker es ideal para eso y lo he usado pero he tenido que hacer codigos innecesarios como este para separar los datos de las fechas

procedure TForm5.DateTimePicker1CloseUp(Sender: TObject);
var t0,t1,t2,r0,r1,r2,f:string; dia1,dia2,mes1,mes2,ano1,ano2,f1:integer;
begin
dxButton4.Enabled:=true;
label10.Caption:=(DateToStr(DateTimePicker1.date));
label11.Caption:=(DateToStr(DateTimePicker2.date));
t0:=label10.Caption;delete(t0,3,10);
t1:=label10.Caption;delete(t1,1,3);delete(t1,3,10);
t2:=label10.Caption;delete(t2,1,6);
r0:=label11.Caption;delete(r0,3,10);
r1:=label11.Caption;delete(r1,1,3);delete(r1,3,10);
r2:=Form1.ComboBox5.Text;
dia1:=strtoint(t0); dia2:=strtoint(r0);
mes1:=strtoint(t1); mes2:=strtoint(r1);
ano1:=strtoint(t2);ano2:=strtoint(r2);


Para poder separar los datos de las fechas en dia, mes y año, podrías haber utilizado el procedure DecodeDate de la unidad SysUtils y extraer cada uno de ellos en una variable determinada mas o menos de la siguiente forma:
procedure TForm1.Button1Click(Sender: TObject);
Var dia,mes,anio:Word;
begin
DecodeDate(DateTimePicker1.Date,anio,mes,dia);//extraigo de la fecha los datos del año, mes y día en variables separada
ShowMessage('El día es '+IntToStr(dia));//muestro el día
ShowMessage('El Mes es '+IntToStr(mes));//muestro el mes
ShowMessage('El año es '+IntToStr(anio));//muestro el año
end;


Saludos...:)

Jucho69
27-01-2011, 22:52:19
Hola rgstuamigo

!Es justo lo que estaba buscando!, así ya se pueden utilizar los valores como se quieran independientemente del formato de la fecha, realmente uno se va a veces por el camino más largo de la Caperusita habiendo soluciones como la que me diste.

Está de más que te agradezco tu esfuerzo y los anteriores.

Un buen Saludo :D