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;