Seu aplicativo precisa de informações de data e horário? Precisa de funções que façam operações com o calendário e o registro do tempo?
Sem problemas! O PHP oferece os recursos necessários para aplicações desse tipo através dos elementos Date (data) e Time (tempo). Você pode os métodos relacionados para, por exemplo, exibir a a data e hora corrente em diversos formatos, registrar exatamente quando o usuário fez login no sistema, quando uma compra foi efetuada, quantos dias faltam para o lançamento de um novo produto, quantos dias se passaram desde tal evento até o momento etc.
São muitos recursos e nós vamos ver aqui os principais.
Exibição prática de data
Em uma página em php, escreva o código seguinte para exibir a data atual:
<?php
$hoje = date('Y/m/d');
echo $hoje;
?>
O aplicativo irá exibir exatamente a data atual fornecida pelo servidor.
No caso acima, abrimos e fechamos o código com as tags da linguagem php; criamos a variável $hoje e para seu valor, atribuímos o método que chama a data (date) configurada para o ano (Y), o mês (m) e o dia corrente (d). Depois, publicamos (echo) a variável, que então exibirá a data de hoje, no caso aqui, mostrando:
2015/09/29
Veja que os parâmetros (ano, dia e mês) foram separados por uma barra, conforme é o nosso padrão. De outra forma, você poderia usar espaço, vírgulas ou traço para fazer essa separação.
date('Y m d') = 2015 09 29
date('Y, m, d') = 2015, 09, 29
date('Y-m-d') = 2015-09-29
Se não usar separador, os dígitos aparecerão juntos:
date('Ymd') = 20150929
Vemos que o dia foi representado pela letra d, o mês pela letra m e o ano pela letra Y. Essas descrições são estabelecidas pelo sistema, mas há outras descrições possíveis, por exemplo, chamar o mês pelo nome (setembro), em vez do numeral (09); descrever o dia da semana (terça-feira). É possível! Basta apenas usar o caractere referente ao parâmetro.
Veja a seguir, uma tabela com os formatos para datas:
Dia (day)
d - dia com preenchimento de zero = 01, 02... 10... 31
j - dia sem preenchimento de zero = 1, 2, 3... 20... 31
D - dia textual abreviado = Seg, ter... dom
l (L minúsculo) - dia textual = Segunda-feira... Sábado, Domingo
Mês (Month)
m - mês com preenchimento de zero = 01... 05... 11, 12
n - mês sem preenchimento de zero = 1, 2... 10, 11, 12
M - mês textual abreviado = Jan, Fev... Nov, Dez
F - mês textual = Janeiro... Junho... Dezembro
Ano (Year)
Y - ano completo = 1975... 1999, 2000... 2012... 2015
y - ano abreviado = 12 (2012)... 15 (2015)...
Vamos a um novo exemplo:
<?php
$hoje = date('l, d, M, Y');
echo 'Hoje é ' . $hoje;
?>
Fizemos o seguinte: declaramos a variável $hoje com o valor da função que puxa a data (date) pelos parâmetros do dia textual (l) mais o mês textual abreviadol (M) e o ano completo (Y); depois exibimos uma linha de texto ('Hoje é ') concatenado (.) com o valor da variável $hoje.
O meu resultado foi:
Hoje é Terça-feira, 29, Set, 2015
Exibição prática da hora
Para exibir a hora certa, basta acrescentar os parâmetros adequados na declaração da função da data (date), no caso, H para hora, i para minutos e $ para segundos. Veja:
<?php
$tempo = date('d/M/Y, H:i:s');
echo $tempo;
?>
O que veremos é algo do tipo:
29/Set/2015, 15:51:04
Salvando data no Banco de Dados (formato internacional)
ATENÇÃO: o formato correto para salvar data em um banco de dados é conforme o padrão internacional (formato americano), cuja ordem é inversa da que usamos no Brasil. Enquanto usamos a sequência dia, mês e ano, o padrão internacional usado para salvar o registro de hora em um BD é year, month, day, ou seja, ano, mês e dia.
Inclusive, esse sistema é -- devemos reconhecer -- é mais inteligente que o nosso, pois faculta literal e corretamente uma ordem crescente e decrescente. Por exemplo, se você pegar os valores literais das datas 3 de julho de 2025 e 29 de junho de 2010, literalmente, você compreenderá que a segunda data tem um valor maior e, numa ordem crescente, posterior que a primeira data fictícia, pois, já pelo valor do dia (3 e 29), teríamos um desajuste na ordem, uma vez que o dia 3 é menor que 29, embora pelo valor do ano respectivo de cada qual seria o contrário (2025 é maior que 2010). Já no padrão internacional, isso nunca ocorre, pois a ordem começa pelo ano, depois pelo mês e por último o dia.
Então, se você precisa salvar uma data escrita no nosso formato num BD, será preciso converter para o padrão internacional (de dia/mês/ano para yearr/month/day). Mas, sem problemas! Basta usar o código conversor adiante:
$hoje = 29/09/2015;
$convert = implode("-", array_reverse(explode("/", $hoje)));
Então o BD receberá a data convertida pronta para ser salva como: 2015-09-29
Por outro lado, se a data está salva no BD (no padrão internacional: ano, mês, dia), e você precisa mostrá-la no nosso padrão (de yearr/month/day para dia/mês/ano), use o código a seguir:
$bd = xxxx/xx/xx // variável com o registro do BD
$convert = implode("/", array_reverse(explode("-", $data)));
echo $convert;
Então o resultado será: 29/09/2015
Bem, mas o servidor do seu site pode estar configurado com os dados de outra localidade, dando diferença na hora certa de sua cidade. Nesse caso, será preciso configurar a zona do tempo.
Então, usamos o date_default_timezone_set:
<?php
date_default_timezone_set('America/Sao_Paulo');
$tempo = date('d/M/Y, H:i:s');
echo $tempo;
?>
A hora será exibida pelo local estabelecido (no caso aqui, definimos o horário da cidade de São Paulo).
Ah, outra coisa, talvez a descrição textual do dia semana e do mês também não esteja de acordo com o nosso português, sendo então impresso as datas em inglês (Monday, Sunday, January, September etc.).
Bom, só para garantir, você pode fazer um truquezinho para converter os valores dos parâmetros e assim traduzir as descrições.
Eis um exemplo:
<?php
$data = date('D');
$mes = date('M');
$dia = date('d');
$ano = date('Y');
$semana = array(
'Sun' => 'Domingo',
'Mon' => 'Segunda-feira',
'Tue' => 'Terça-feira',
'Wed' => 'Quarta-feira',
'Thu' => 'Quinta-feira',
'Fri' => 'Sexta-feira',
'Sat' => 'Sábado'
);
$mes_textual = array(
'Jan' => 'Janeiro',
'Feb' => 'Fevereiro',
'Mar' => 'Março',
'Apr' => 'Abril',
'May' => 'Maio',
'Jun' => 'Junho',
'Jul' => 'Julho',
'Aug' => 'Agosto',
'Nov' => 'Novembro',
'Sep' => 'Setembro',
'Oct' => 'Outubro',
'Dec' => 'Dezembro'
);
echo $semana["$data"] . ", {$dia} de " . $mes_textual["$mes"] . " de {$ano}";
?>
O resultado será:
Terça-feira, 29 de Setembro de 2015
O que fizemos dessa vez foi separar os parâmetros do dia, mês e ano, declarando-os em variáveis diferentes.
Para a descrição textual da semana, criamos a variável $semana com uma tabela de valores (array) que verte a abreviação dos dias da semana em inglês para português. Quando então essa variável é chamada, ela pega o valor do dia atual contido na variável $data e traduz para o valor correspondente.
Semelhante ao truque da descrição textual do dia da semana, fizemos com a descrição textual do mês, que configuramos pela array declarada na variável $mes_textual.
Mais especificações, consulte o manual online do PHP clicando aqui.