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.551 ]

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

Lógica para computação - parte III

Lógica para computação - parte IV

Introdução a Lógica para computação

Lógica para Computação - Parte V

Leitura recomendada

Compactador de URL utilizando manipulação de diretórios do Linux com PHP

Formantando nomes com caracteres especiais em PHP

Utilizando PHP para validar dados passados pelo usuário

Capturando conteúdo de sites em PHP

Instalando Lamp Stack no Servidor Debian

  
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