Bora ajudar o programador a transformar café em código?

Mostrando postagens com marcador Horário. Mostrar todas as postagens
Mostrando postagens com marcador Horário. Mostrar todas as postagens

Data e hora em Português no PHP: setlocale() e strftime()

O PHP Progressivo agora faz parte do Programação Progressiva!

Este conteúdo foi atualizado e movido para o nosso novo endereço.

Redirecionando para: Clique aqui se não for redirecionado

Neste tutorial de nosso Curso de PHP, vamos aprender a usar datas e horários locais, no formato e escrita de nossa língua, através das funções setlocale() e strftime().

Curso de PHP com certificado
Obter meu certificado!

Formatos locais: setlocale()

Até o momento, todas nossas datas e horários tem o formato americano, ou seja:
12/23/2019

Primeiro o mês, depois o dia, depois o ano.
Sendo que no Brasil primeiro usamos o dia primeiro, só depois o mês.

Quando fizemos:
echo date("d/F/Y", 1551028815);

O resultado foi: 24/February/2019
Mas não queremos 'February', somos brasileiros!

Queremos é Fevereiro!
A resposta para isso é setar o local, com a setlocale, basta fazer:
setlocale(LC_ALL, 'pt_BR');

Experimente:
<?php
	setlocale(LC_ALL, 'pt_BR');
	echo strftime('%d/%B/%G');
?>
Se não funcionar, experimente:
<?php
	setlocale(LC_ALL, 'pt_BR.utf8');
	echo strftime('%d/%B/%G');
?>

Se vai ser pt_BR ou não, vai depender do que tem instalado em seu servidor.
LC_ALL é uma constante que serve para definir várias coisas a respeito das datas locais que você vai usar.

Note que não usamos date(), e sim strftime()

A função strftime()

A função date() serve apenas para exibir as coisas em inglês padrão.
Se quisermos usar outra língua para trabalharmos com data e tempo, precisamos da strftime(), mas ela é bem semelhante a date(), mas usa outros parâmetros, veja:

%a - dia da semana abreviado
%A - dia da semana completo
%b - dia do mês abreviado
%B - dia do mês completo
%c - data e hora padrão 04/26/05 21:40:46
%C - Número do século 21
%d - Dia numérico do mês, com 0 na frente
%D - Equivalente a %m/%d/%y
%e  - Dia numérico do mês, sem o 0 na frente
%g  - Exibe o ano, mas sem o século (tipo 19 ao invés de 2019)
%G  - Ano numérico
%h  - Mesmo que %b
%H - Horário numérico de 24 horas com 0 na frente
%I - Horário numérico num relógio de 12 horas, com 0 na frente
%j - Número do dia do ano de 001 até 366
%m - Número do mês, com 0 na frente
%M - Número do minuto,com 0 na frente, de 00 até 59
%n  - Caractere de quebra de linha \n
%p - Antes e pós meridiano AM, PM
%r - Antes e pós meridianos com ponto A.M., P.M.
%R - Notação de 24 horas 00:01:00 até 23:59:59
%S - Número de segundos com zero, de 00 até 59
%t - Caractere de tab \t
%T - Equivalente a %H:%M:%S 12:23:41
%u - Dia numérico da semana, onde 1 = domingo
%U - Número numérico da semana, em que o primeiro domingo é primeiro dia da primeira semana
%V - Número numérico da semana, em que semana 1=primeira semana com>=4 dias, vai de 01 a 53
%W - Número numérico da semana, em que a primeira segunda-feira é primeiro dia da primeira semana
%w - Número do dia da semana, onde 0 = domingo
%x - Padrão de data local d:m:a
%X - Padrão de tempo local h:m:s
%y - Número do ano sem o século
%Y - Número do ano, com o século
%Z ou %z - Fuso horário do horário de verão oriental
%% - Caractere de porcentagem %

Usando as funções time() e date()

O PHP Progressivo agora faz parte do Programação Progressiva!

Este conteúdo foi atualizado e movido para o nosso novo endereço.

Redirecionando para: Clique aqui se não for redirecionado

Neste tutorial de nossa apostila de PHP, vamos aprender a usar a função time() junto da função date() e aprender poderosas técnicas de manipulações de datas.

Apostila PHP Progressivo (baixar)

A função time()

A função time é super mega hiper simples.
Basta invocar: time()

Ela retorna um inteiro: o Unix timestamp atual.
Prontinho. Só isso.

Por exemplo, eu rodando aqui agora: echo time();
O resultado é: 1551028815

Mas convenhamos, esse tanto de segundo, não é muito útil, não quer dizer nada, não dá pra dizer quantos dias, meses ou anos tem aí, não é muito 'legível' para humanos'.

Concorda?

Função date() com função time()

Lembra da função date() ? Responsável por exibir datas e horários de tudo quanto é jeito que você imaginar?

Pois é, podemos combinar ela com a time e exibir datas de maneira que humanos consigam entender e captar de maneira mais interessante.

Por exemplo, para exibirmos uma data no formato: dia-mes-ano
Fazemos: echo date("d/F/Y", 1551028815);

Note que passamos uma timestamp que obtivemos com a time().

Podemos ir mais além e mostrar hora:minuto:segundo:
echo date("d/F/Y - h:i:s", 1551028815);

Ou seja, pegamos o timestamp atual com a função time() e a função date() com seus inúmeros parâmetros, transforma esse número medonho bizarro em datas bonitas e prazerosas.

Exemplo de uso de time()

Crie um script que exibe o horário daqui exatamente uma semana.

Vamos pegar a timestamp atual:
$agora = time();

Agora vamos somar os segundos de uma semana:
$agora += 7*24*60*60;

O script que exibe o dia, mês, ano e horário atual e o exatamente daqui uma semana é:
 <?php
  $proxsemana = time()+(7 * 24 * 60 * 60);
  echo "Atual:" .date("d/F/Y - h:i:s", time())."<br/>";
  echo "Semana que vem: ".date("d/F/Y - h:i:s", $proxsemana)."<br/>";
 ?>
Você pode usar isso para fazer promoções em sites, por exemplo "Você tem apenas uma semana para aproveitar a queima de estoque..."

Obtendo datas e horários em PHP: Função getdate()

O PHP Progressivo agora faz parte do Programação Progressiva!

Este conteúdo foi atualizado e movido para o nosso novo endereço.

Redirecionando para: Clique aqui se não for redirecionado

Neste tutorial de nosso curso de PHP, vamos aprender a usar a função getdate() que nos fornece de maneira completa datas e horários no tempo.



A função getdate()

A sintaxe da função é:
array getdate (int timestamp)

Ou seja, devemos fornecer um timestamp apenas e ela nos retorna um array completo, de 11 elementos:

  1. hours: Representação numérica da hora do dia, de 0 até 23
  2. mday: Representação numérica do dia do mês, de 1 até 31
  3. minutes: Representação numérica dos minutos, de 0 até 59
  4. mon: Representação numérica do mês, de 1 até 12
  5. month: Nome do mês, escrito, por exemplo Maio
  6. seconds: Representação numérica dos segundos, de 0 até 59
  7. wday: Representação numérica do número da semana. Por exemplo, 0 é domingo
  8. weekday: Nome do dia da semana, por exemplo, Segunda-feira
  9. yday: Representação numérica do dia do ano, de 0 até 365
  10. year: Representação numérica do ano, em 4 dígitos, como 2020
  11. 0: Timestamp, número de segundos desde a Unix epoch
Bem completa essa getdate(), não?

Exemplo de uso da getdate()

No momento que vos escrevo este tutorial, a atual timestamp é:

1550931619


Vamos criar um array com esta data:
$data = getdate(1550931619);

Agora vamos printar este array:
print_r ($data)

(Lembre-se: use print_r para printar arrays)

O resultado é:
Array ( 
[seconds] => 19 
[minutes] => 20 
[hours] => 11 
[mday] => 23 
[wday] => 6 
[mon] => 2 
[year] => 2019 
[yday] => 53 
[weekday] => Saturday 
[month] => February 
[0] => 1550931619 )

Exemplo de uso da getdate()

Crie um script que pega o timestamp ATUAL, desse exato momento (use o parâmetro date correto), mande pra getdate() e imprima o array.

Mostre o resultado nos comentários.

Um código mais fácil de entender:
$data = date("U");
print_r (getdate($data);

Ou simplesmente:
print_r( getdate( date("U") ) );

Veja também

O melhor PC para programar

O melhor celular para programar