Somar Dias a uma Data !

Delphi

18/02/2004

Pessoal, gostaria de saber como faço para somar dias a uma data. Preciso deste cálculo para a seguinte situação:

- No BD defini-se um campo para Data de Vencimento de um Boleto. Mas só será cobrado juros a partir de 3 dias apos o vencimento. Preciso entao somar à data de vencimento 3 dias. Do jeito ´lusitano´ teria q verificar se é dia 30,31, fevereiro, bisexto, etc????

Por favor, me ajudem ! Obrigada! :D


Vivipeder

Vivipeder

Curtidas 0

Respostas

Paulo_amorim

Paulo_amorim

18/02/2004

Olá

O Delphi tem a função IncDay, IncMonth, escolha o melhor.

IncEveryThing (brincadeira esse não :twisted: )


GOSTEI 0
Rômulo Barros

Rômulo Barros

18/02/2004

Desenvolvi esta Unit - Mas somente serve pra alguns casos:


{**************************************************************************

Desenvolvi esta Unit - Mas somente serve pra alguns casos:


************************************************************************** }

unit Funcoes;

interface

Uses
  SysUtils, ShellApi,Forms,Windows, ComCtrls, Dialogs;

Var
  Horas,Minutos,Segundos,Milessegundos : Word;
  s : string[255];
  c : array[0..255] of Byte absolute s;

   // Procedimentos

       Procedure IncrementarHora(Var parHora : TDateTime; parValor : Word = 0);
       Procedure IncrementarMinuto(Var parHora : TDateTime; parValor : Word = 0);
       Procedure IncrementarSegundos(Var parHora : TDateTime; parValor : Word = 0);
       Procedure DecrementarHora(Var parHora : TDateTime; parValor : Word = 0);
       Procedure DecrementarMinuto(Var parHora : TDateTime; parValor : Word = 0);
       Procedure DecrementarSegundo(Var parHora : TDateTime; parValor : Word = 0);
       Procedure IncrementarAno(Var parData : TDateTime; parValor : Word = 0);
       Procedure IncrementarMes(Var parData : TDateTime; parValor : Word = 0);
       Procedure IncrementarDia(Var parData : TDateTime; parValor : Word = 0);

   // Funções



implementation

uses Math, DateUtils;

Procedure IncrementarHora(Var parHora : TDateTime; parValor : Word = 0);
Begin
   DecodeTime(parHora,Horas,Minutos,Segundos,Milessegundos);
   Horas := Horas + parValor;
   While(Horas >= 24)Do
   Begin
      Horas := Horas - 24;
   End;
   parHora := EncodeTime(Horas,Minutos,Segundos,Milessegundos);
End;


Procedure IncrementarMinuto(Var parHora : TDateTime; parValor : Word = 0);
Begin
  DecodeTime(parHora,Horas,Minutos,Segundos,Milessegundos);
  Minutos := Minutos + parValor;
  While(Minutos >= 60)Do
  Begin
     Minutos := Minutos - 60;
     Horas := Horas + 1;
     If(Horas = 24)then
       Horas := 0;
  End;
  parHora := EncodeTime(Horas,Minutos,Segundos,Milessegundos);
End;


Procedure IncrementarSegundos(Var parHora : TDateTime; parValor : Word = 0);
Begin
   DecodeTime(parHora,Horas,Minutos,Segundos,Milessegundos);
   Segundos := Segundos + parValor;
   While(Segundos >= 60)Do
   Begin
      Segundos := Segundos - 60;
      Minutos := Minutos + 1;
      If(Minutos = 60)Then
      Begin
        Minutos := 0;
        Horas := Horas + 1;
        If(Horas = 24)Then
          Horas := 0;
      End;
   End;
   parHora := EncodeTime(Horas,Minutos,Segundos,Milessegundos);
End;


Procedure DecrementarHora(Var parHora : TDateTime; parValor : Word = 0);
Begin
   DecodeTime(parHora,Horas,Minutos,Segundos,Milessegundos);
   If(Horas >= parValor)Then
     Horas := Horas - parValor
   Else
   Begin
      While(Horas < parValor)Do
         Horas := Horas + 24;
      Horas := Horas - parValor;
   End;
   If(Horas = 24)Then
     Horas := 0;
   parHora := EncodeTime(Horas,Minutos,Segundos,Milessegundos);
End;


Procedure DecrementarMinuto(Var parHora : TDateTime; parValor : Word = 0);
Begin
   DecodeTime(parHora,Horas,Minutos,Segundos,Milessegundos);
   If(Minutos >= parValor)Then
     Minutos := Minutos - parValor
   Else
   Begin
      While(Minutos < parValor)Do
      Begin
         Minutos := Minutos + 60;
         If(Horas = 0)Then
           Horas := 24;
         Horas := Horas -1;
      End;
      Minutos := Minutos - parValor;
   End;
   parHora := EncodeTime(Horas,Minutos,Segundos,Milessegundos);
End;


Procedure DecrementarSegundo(Var parHora : TDateTime; parValor : Word = 0);
Begin
   DecodeTime(parHora,Horas,Minutos,Segundos,Milessegundos);
   If(Segundos >= parValor)Then
     Segundos := Segundos - parValor
   Else
   Begin
      While(Segundos < parValor)Do
      Begin
         Segundos := Segundos + 60;
         If(Minutos = 0)Then
         Begin
            Minutos := 60;
            If(Horas = 0)Then
              Horas := 24;
            Horas := Horas - 1;
         End;
         Minutos := Minutos - 1;
      End;
      Segundos := Segundos - parValor;
   End;
   parHora := EncodeTime(Horas,Minutos,Segundos,Milessegundos);
End;


Procedure IncrementarAno(Var parData : TDateTime; parValor : Word = 0);
Begin
   IncYear(parData,parValor);
End;


Procedure IncrementarMes(Var parData : TDateTime; parValor : Word = 0);
Begin
   IncMonth(parData,parValor);
End;


Procedure IncrementarDia(Var parData : TDateTime; parValor : Word = 0);
Begin
   IncDay(parData,parValor);
End;

end.



GOSTEI 0
Edumarc

Edumarc

18/02/2004

Para o calculo da data é só somar os dias que vc quer, por exemplo
edit1.text := formatdatetime(´dd/mm/yyyy´,date+strtoint(edit2.text)));
caso a data seja 28/02/2004 e o valor de edit2.text for 3 o resultado será 02/03/2004, o sistema se encarrega de não colocar 31/02/2004 como por exemplo se voce somar 30/04/2004 + 1 o resultado será 01/01/2005 e não 31/04/2004 que não existe.


GOSTEI 0
Vivipeder

Vivipeder

18/02/2004

O comando IncDay não é reconhecido ´Undeclared Identifier´. A IncMonth existe....

Há outra ???


GOSTEI 0
Vivipeder

Vivipeder

18/02/2004

Gente, nao tem um modo mais fácil ?!?!??!


GOSTEI 0
Rômulo Barros

Rômulo Barros

18/02/2004

Faltou um detalhe:

Uses
  DateUtils ;



GOSTEI 0
Vivipeder

Vivipeder

18/02/2004

Valeu ! Funcionou!


GOSTEI 0
POSTAR