Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 14 de Agosto de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
182 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Dicas]  Funções para trabalhar com datas
Publicado por deivdysouza : Segunda, Setembro 20, 2010 - 10:18 GMT-3 (1579 leituras)
Comentários 12 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Diego Campos Nem sempre fazer "Data+30" ou "Data-30" resolve um problema, pois as vezes não podemos mexer no dia de uma data e os meses não possuem a mesma quantidade de dias! Veja nesta dica algumas funções criadas para resolver este problema!

As funcões abaixo foram criadas por Deivdy Do Carmo De Souza, usuário deivdysouza do site, para tirar tantos meses ou anos de uma data, sem mexer nos dias:

function TiraDias(data: tdatetime; menosdias: tdatetime): tdatetime;
begin
  result := strtodatetime(formatdatetime('dd/mm/yyyy', data - menosdias));
end;
 
//corrigida em 22/09/2010 por Kelver Merlotti: acrescentado o bloco repeat..until
function TiraMeses(data: tdatetime; menosmeses: integer): tdatetime;
var
  Y, M, D: integer;
  datacalc: string;
begin
  Y := strtoint(formatdatetime('yyyy', data));
  M := strtoint(formatdatetime('MM', data)) - menosmeses;
  repeat
    if M <= 0 then
    begin
      Y := Y - 1;
      if M < 0 then
        M := 12 + M
      else
        M := 12;
    end;
  until M > 0;
  D := strtoint(formatdatetime('DD', data));
  datacalc := inttostr(D) + '/' + inttostr(M) + '/' + inttostr(Y);
  result := strtodatetime(datacalc);
end;
 
function TiraAnos(data: tdatetime; menosanos: integer): tdatetime;
var
  Y, M, D: integer;
  datacalc: string;
begin
  Y := strtoint(formatdatetime('yyyy', data)) - menosanos;
  M := strtoint(formatdatetime('MM', data));
  D := strtoint(formatdatetime('DD', data));
  datacalc := inttostr(D) + '/' + inttostr(M) + '/' + inttostr(Y);
  result := strtodatetime(datacalc);
end;

Segue abaixo um exemplo de uso, no evento onClick de um botão:

procedure TForm1.Button1Click(Sender: TObject);
var
  dthr: TDateTime;
begin
  dthr := Date;
  ShowMessage(DateTimeToStr(dthr));
  dthr := TiraMeses(dthr, 4);
  ShowMessage(DateTimeToStr(dthr));
  dthr := TiraAnos(dthr, 3);
  ShowMessage(DateTimeToStr(dthr));
end;

Por: Deivdy Do Carmo De Souza (deivdysouza)
Contato: deivdysouza@gmail.com

Dica do Editor

Veja também esta outra dica publicada no site pelo usuário edusorio, com mais funções e caminhos alternativos para trabalhar com datas: Funções para manipulação de datas

Kelver Merlotti - Coordenador Editorial
Contato: kelver@activedelphi.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: deivdysouza (deivdysouza@gmail.com) : Set 21, 2010 - 01:02
(Informações sobre o membro | Enviar uma mensagem)
Demorou Mais ela está ai!
São Funcões Simples de manipular!


Bom Proveito!


O mundo é um lugar perigoso de se viver, não por causa daqueles que fazem o mal, mas sim por causa daqueles que observam e deixam o mal acontecer.

Programador...
Deivdy Do Carmo De Souza
Todos Os Direitos Reservados


por: gilsonnrodrigues (gilsonnr@hotmail.com) : Set 24, 2010 - 09:14
(Informações sobre o membro | Enviar uma mensagem) http://
isso q dá o cara não saber porra nenhuma e achar q pode ensinar.

o tiradia é a coisa mais triste q já vi.


o tirameses tente com 31/01/2010 e tirar um mês.


.tiradia
se o pc do cara estiver usando formato americano dá pau.
sem falar q era só fazer assim:
Data - Dias;

result := strtodatetime(formatdatetime('dd/mm/yyyy', data - menosdias));


pra q essas conversoes pra lá e pra cá?

o tirameses é IncMonth(Data, -Meses);


por: fanfarrone (jairo.araujo.silva@gmail.com) : Set 24, 2010 - 05:00
(Informações sobre o membro | Enviar uma mensagem) http://
A intenção de ajudar é ótima, mesmo com os bugs, mas em questão de praticidade... já temos funções no proprio delphi que fazem isso
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados