Diferença entre duas datas

Veja a dica que mostra como retornar a diferença em Anos, Meses e Dias entre duas datas.

Neste artigo iremos explicar como verificar a diferença em dias, meses ou anos entre a data inicial e final, utilizando recursos que o Delphi oferece. Comece abrindo o Delphi e criando um novo formulário que irá conter os seguintes objetos:

A tela ficará como a Figura 1.

Figura 1. Layout do novo formulário

Neste momento vamos dar um duplo click no botão calcular e, no início da unit, vamos declarar o use DateUtils. O código ficará como o da Listagem 1.

Listagem 1. Declaração do DateUtils

unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, DateUtils; type TForm2 = class(TForm) dtInicial: TDateTimePicker; dtFinal: TDateTimePicker; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Edit2: TEdit; Label5: TLabel; Edit3: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin end; end.

Após a declaração, vamos começar a entender como é realizado o procedimento para o cálculo entre datas. No código da Listagem 2 estamos utilizando as funções DaysBetween, MonthsBetween e YearsBetween, ou seja, em cada uma dessas funções você passará a data inicial e final a ser calculada e retornará o valor da diferença.

Listagem 2. Declaração de funções

procedure TForm2.Button1Click(Sender: TObject); begin Edit1.Text := IntToStr(DaysBetween(dtInicial.Date, dtFinal.Date)); Edit2.Text := IntToStr(MonthsBetween(dtInicial.Date, dtFinal.Date)); Edit3.Text := IntToStr(YearsBetween(dtInicial.Date, dtFinal.Date)); end;

Você também pode incrementar a sua data, ou seja, aumentar a quantidade de dias, meses ou anos. Desta forma, o seu código ficará como o da Listagem 3.

Listagem 3. Incrementando datas

procedure TForm2.Button1Click(Sender: TObject); begin Edit1.Text := DateToStr(IncDay(dtInicial.Date, 10)); Edit2.Text := DateToStr(IncMonth(dtInicial.Date, 10)); Edit3.Text := DateToStr(IncYear(dtInicial.Date, 10)); end;

O objeto TDateTimePicker permite que trabalhemos com hora também, ou seja, podemos alterar a sua data por hora. Para fazer isto, selecione o objeto object inspector. Altere a propriedade kind para dktime e repare que a sua data mudou para hora, conforme a Figura 2.

Figura 2. Trabalhando com horas

O formulário foi modificado para mostrar que o conceito de horas tem a mesma finalidade que o de datas. Na Listagem 4 está o código que faz o teste.

Listagem 4. Testando a conversão

procedure TForm2.Button1Click(Sender: TObject); begin Edit1.Text := IntToStr(HoursBetween(HrInicial.Time, HrFinal.Time)); Edit2.Text := IntToStr(MinutesBetween(HrInicial.Time, HrFinal.Time)); Edit3.Text := IntToStr(SecondsBetween(HrInicial.Time, HrFinal.Time)); end;

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados