Trabalhando com datas em PHP

A maioria dos sistemas utilizam datas para controlar seu funcionamento, ou ainda para cadastros, etc. A linguagem PHP não poderia ser diferente, também possui um vasto suporte à manipulação de datas, bem como os procedimentos de tempo.

[ Hits: 25.221 ]

Por: Ariel Galante Dalla Costa em 22/12/2011 | Blog: http://arielgdc.wordpress.com


Calculando a diferença de datas



Há vários parâmetros de expressão para função. E pode-se utilizar todos os parâmetros, basta acessar o manual oficial da linguagem em:
Uma forma simples de incrementar uma data é somar à função 'date' o valor desejado, como por exemplo:

<?php echo date("Y")+1; //IRÁ INSERIR UM ANO ?>


Ou, se a data possuir mais que um parâmetro válido, irá inserir no parâmetro mais deslocado à esquerda, como por exemplo:

<?php echo date("d/m/Y")+1; //IRÁ INSERIR UM DIA ?>


A função time() retorna o timestamp atual da máquina, ou seja, o current. A maior usabilidade que vi até hoje, fora na inserção de cookies para página, onde que o servidor insere através desta forma e apenas adiciona-se o valor desejado em segundos.

Para efetuar um teste, pode-se imprimir na tela a data atual fazendo:

<?php echo time(); IRÁ IMPRIMIR O TIMESTAMP ATUAL ?>


Não está errado dizer que a data através da função 'time()' está certa, pois a data está em outro formato. Um exemplo totalmente utilizável para a função 'time()', além do cálculo, pode ser a inserção de um 'cookie', como no exemplo abaixo:

<?php setcookie("Cookie_teste", time()+3600); //IRÁ INSERIR O COOKIE POR UMA HORA, POIS É O TEMPO ATUAL + 3600 SEGUNDOS (UMA HORA) ?>


Calculando a diferença de datas

Para calcular a diferença de datas, basta gerar a data atual em segundos e diminuir da data desejada. Já tem-se a função pronta, então não é preciso fazer uma função para converter dias, horas, minutos e anos, para timestamp.

O nome da função é 'mktime()'.

A função é dada por: mktime (hora, minuto, segundo, mês, dia, ano):

<?php $Time_atual=mktime(0,0,0,5,12,2010); echo $Time_atual; ?>


Como passou-se a hora, minuto e segundo como zero, o servidor somente irá calcular o que estiver diferente de zero, ou seja (neste caso), irá transformar o dia, mês e ano.

Ao calcular a diferença de uma data para outra, deve-se transformar as duas para segundos, e posteriormente diminuir a maior da menor, como por exemplo:

<?php $Data_1=mktime(0,0,0,5,12,2010); $Data_2=mktime(0,0,0,6,12,2011); $Diferenca=$Data_2 - $Data_1; //CALCULA-SE A DIFERENÇA EM SEGUNDOS echo "A diferença é de ".($Data_2/(60*60*24))." dias"; //CALCULA-SE A DIFERENÇA EM DIAS ?>


Calcular a diferença em anos, horas, minutos e segundos, basta colocar a lógica para funcionar como já especificou-se, por exemplo:

<?php $Data_1=mktime(10,5,32,5,12,2010); $Data_2=mktime(8,45,5,6,12,2011); $Diferenca=$Data_2 - $Data_1; //CALCULA-SE A DIFERENÇA EM SEGUNDOS echo "A diferença é de ".($Data_2/(60*60*365))." anos"; //CALCULA-SE A DIFERENÇA EM ANOS echo "A diferença é de ".($Data_2/(60*60*24))." dias"; //CALCULA-SE A DIFERENÇA EM DIAS echo "A diferença é de ".($Data_2/(60*60))." horas"; //CALCULA-SE A DIFERENÇA EM HORAS echo "A diferença é de ".($Data_2/60)." minutos"; //CALCULA-SE A DIFERENÇA EM MINUTOS echo "A diferença é de ".($Data_2)." segundos"; //CALCULA-SE A DIFERENÇA EM SEGUNDOS ?>


Há outras formas também de cálculos com datas, exemplo: como saber qual será a data daqui a 30 dias por exemplo, já que a função 'date' suporta o 'timestamp'?.

Novamente colocaremos a lógica apresentada na introdução:

<?php $Data_Atual=time(); //BUSCA A DATA ATUAL $Acrescimo=22*24*60*60; //CALCULA O ACRÉSCIMO, DE 22 DIAS $Data_Gerada=$Data_Atual+$Acrescimo; // SOMA A DATA ATUAL AOS 22 DIAS echo "A data gerada foi: ".date("d/m/Y", $Data_Gerada); //TRANSFORMA PARA O FORMATO dia/mês/ano ?>


Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Calculando a diferença de datas
   3. Time zone e Conclusão
Outros artigos deste autor

MySQL, Apache2, PHP5, phpMyAdmin e o driver de conexão com o NetBeans no OpenSUSE 11.2

Ética na Programação

Computação em nuvem, uma visão panorâmica

Lógica para Computação - Parte V

Lógica para computação - parte II

Leitura recomendada

BolachaMALPPH Apache X Lighttpd X PHP/FastCGI X APC X HTTPREF X MySQL

Criando Virtual Host no Apache: simples assim

Usando classes em conexão e consultas à banco de dados em PHP

Google Chart: Criando gráficos dinâmicos em minutos

Criando gráficos com a classe JPGraph (parte 2)

  
Comentários
[1] Comentário enviado por arieldll em 22/12/2011 - 11:44h

Ha um erro que acabou passando despercebido em um exemplo:
Para calcular a insercao de 22 dias, precisa-se multiplicar tambem por 24, pois sao 22 dias * 24 horas * 60 minutos * 60 segundos.

Aqui esta o codigo certo:
<?php
$Data_Atual=time(); //BUSCA A DATA ATUAL
$Acrescimo=22*24*60*60; //CALCULA O ACRÉSCIMO, DE 22 DIAS
$Data_Gerada=$Data_Atual+$Acrescimo; // SOMA A DATA ATUAL AOS 22 DIAS
echo "A data gerada foi: ".date("d/m/Y", $Data_Gerada); //TRANSFORMA PARA O FORMATO dia/mês/ano
?>

[2] Comentário enviado por rai3mb em 22/12/2011 - 16:10h

Corrigido.

[3] Comentário enviado por ederrb em 26/12/2011 - 14:12h

Bem, o mais adequado para calcular datas não é o apresentado neste artigo. Leiam o manual http://br.php.net/strtotime

Exemplo, para somar 22 dias a data atual, bastaria vc fazer algo como:

echo date('d/m/Y',strtotime('+22 days'));

Muito mais fácil, não?

Abraço!

[4] Comentário enviado por arieldll em 26/12/2011 - 15:14h

ederrb, obrigado por sua observacao e por compartilhar esta funcao conosco.
Fica a criterio do programador definir qual prefere. Eu acredito que desta forma fique muito mais organizado, mas sua dica esta mais do que valendo.
Valeu amigao

[]'s Ariel.

[5] Comentário enviado por DonatoBarros em 06/03/2013 - 16:00h

Parabéns pelo artigo. Muito bom...

http://donatobarros.com


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts