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:

  • dois DateTimePicker;
  • três Edit;
  • um Button.

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;