Pular para o conteúdo

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.
Ariel Galante Dalla Costa arieldll
Hits: 26.800 Categoria: PHP Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Introdução

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.

A linguagem PHP se baseia no UNIX CURRENT_TIMESTAMP, que é gerado em segundos.

Mas o que é o UNIX CURRENT_TIMESTAMP?

É uma forma de controlar o tempo total de execução em segundos. A contagem iniciou-se em 1º de janeiro de 1970. Portanto, o time Unix é apenas o intervalo do número de segundos entre duas datas. Isto é muito utilizado nos sistemas atuais para acompanhamento e tratamento de informação datadas em aplicações dinâmicas e distribuídas em linha de tempo, fornecendo maior confiabilidade ao cliente.

Em 19 de janeiro de 2038 irá terminar o suporte ao timestamp em processadores 32-bit, devido a um estouro no cálculo. Antes disso, milhares de aplicações irão necessitar adotar um novo sistema, ou ser migrados para sistemas de 64bits, que suportarão maior timestamp.

Mas enquanto isso, vamos utilizando. E quando for necessário, passaremos nossas máquinas para 64bits.

Para os cálculos, bem como a diferenças, são utilizadas as medidas em segundos. Antes de tudo vamos a uma breve revisão:
  • SEGUNDO: 1000 milésimos;
  • MINUTO: 60 segundos;
  • HORA: 60 minutos;
  • DIA: 24 horas;
  • MÊS: 30 dias;
  • ANO: 365 dias(não bissexto);
  • DÉCADA: 10 anos;
  • SÉCULO: 100 anos;
  • MILÊNIO: 1000 anos.

Agora, se quisermos efetuar cálculos com datas, devemos ter em mente que:
  • SEGUNDO: 1000 milésimos.
  • MINUTO: 60 segundos.
  • HORA: 60 segundos * 60 minutos.
  • DIA: 60 segundos * 60 minutos * 24 horas.
  • MÊS: 60 segundos * 60 minutos * 24 horas * 30 dias.
  • ANO: 60 segundos * 60 minutos * 24 horas * 365 dias OU 60 segundos * 60 minutos * 24 horas * ((30 * 12) + 5).
  • DÉCADA: 60 segundos * 60 minutos * 24 horas * 365 dias OU 60 segundos * 60 minutos * 24 horas * ((30 * 12) + 5) * 10.
  • SÉCULO: 60 segundos * 60 minutos * 24 horas * 365 dias OU 60 segundos * 60 minutos * 24 horas * ((30 * 12) + 5) * 10 * 10.
  • MILÊNIO: 60 segundos * 60 minutos * 24 horas * 365 dias OU 60 segundos * 60 minutos * 24 horas * ((30 * 12) + 5) * 10 * 10 * 10.

Para sabermos a data atual do servidor PHP, temos duas maneiras: a função date() e a função time().

A função date("STRING", $timestamp) permite expressar um calendário de várias maneiras.

Os parâmetros para STRING mais básicos são:
  • d : Dia do mês (2 dígitos);
  • D : Dia do mês abreviado em três letras: de Mon até Sun;
  • m : Dia do mês (numero de 2 dígitos);
  • M : Mês abreviado com três letras (três letras: Jan a Dec);
  • y : Ano com 2 dígitos;
  • Y : Ano com 4 dígitos;
  • l : Dia da semana por extenso (Sunday até Saturday);
  • h : Hora em formato de 12 horas;
  • H : Hora em formato de 24 horas;
  • i : Minutos em formato de 2 dígitos;
  • s : Segundos em formato de 2 dígitos;
  • A : AM ou PM.

Exemplo:

<?php echo date("Y"); //IRÁ IMPRIMIR O ANO NO FORMATO 20+ANO echo date("d"); //IRÁ IMPRIMIR O DIA (30 DIAS) echo date("m"); //IRÁ IMPRIMIR O MÊS NO FORMATO NUMÉRICO 1-12 echo date("d/m/Y"); //IRÁ IMPRIMIR dia/mês/ano, ex: 20/12/2011 ?>
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.


O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução
   2. Calculando a diferença de datas
   3. Time zone e Conclusão

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

Lógica para computação - parte IV

Lógica para Computação - Parte V

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

Lógica para computação - parte III

Criando um sistema de banners rotativos em PHP

Instalando Lamp Stack no Servidor Debian

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

Tags automáticas em URLs com a classe urlmatch da PHP

PEAR - Utilizando classes prontas e documentadas no PHP

#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.

Contribuir com comentário

Entre na sua conta para comentar.