Somar Dias a uma Data !
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
- 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
Curtidas 0
Respostas
Paulo_amorim
18/02/2004
Olá
O Delphi tem a função IncDay, IncMonth, escolha o melhor.
IncEveryThing (brincadeira esse não :twisted: )
O Delphi tem a função IncDay, IncMonth, escolha o melhor.
IncEveryThing (brincadeira esse não :twisted: )
GOSTEI 0
Rômulo Barros
18/02/2004
Desenvolvi esta Unit - Mas somente serve pra alguns casos:
{**************************************************************************
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
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.
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
18/02/2004
O comando IncDay não é reconhecido ´Undeclared Identifier´. A IncMonth existe....
Há outra ???
Há outra ???
GOSTEI 0
Vivipeder
18/02/2004
Gente, nao tem um modo mais fácil ?!?!??!
GOSTEI 0
Rômulo Barros
18/02/2004
Faltou um detalhe:
Uses DateUtils ;
GOSTEI 0
Vivipeder
18/02/2004
Valeu ! Funcionou!
GOSTEI 0