Em: PHP
8 ago 2011No último artigo, vimos o fundamental sobre como formatar data e hora em php de forma objetiva e abordando os principais casos de uso. Agora, vamos nos aprofundar no sentido de permitir que a data e hora sejam formatadas em português ou em qualquer outro idioma, utilizando as funções setlocale( ) e strftime( ).
Sabemos que a função date( ) é a responsável por formatar data e hora em php, contudo não é extensível a todos os idiomas. Dias da semana (sábado, sab, domingo, dom, etc) e do mês (jan, fev, janeiro, fevereiro, etc.) são retornados em inglês, o que nem sempre é conveniente.
Para resolver esse problema, utilizam-se as funções setlocale( ) e strftime( ), que fornecem resultados, conforme o idioma e país selecionado. É uma ótima solução para sites que possuem diversas versões em vários países.
Esta função permite definir a categoria da padronização (monetária, numérica, classificação e conversão de caractere, e data e hora), o idioma e o país que devem ser considerados pelo php na hora da execução do script. Abaixo, a estrutura da função:
string setlocale ( mixed $category , string $locale [, string $... ] )
ou
string setlocale ( mixed $category , array $locale )
Analisando sua estrutura, a variável $category receberá a categoria da padronização e a variável $locale receberá o idioma, país e o conjunto de caracteres (opcional). Abaixo, os valores suportados pelo parâmetro category:
Os valores suportados por locale possuem uma estrutura peculiar, qual seja: language_COUNTRY.charset . Em outras palavras, no nosso caso, é o conhecido pt_BR.iso-8859-1. Vamos ver alguns exemplos de valores suportados pelo parâmetro locale:
A função setlocale( ) aceita que seja configurado mais de um parâmetro locale, permitindo a especificação de diferentes localizações simultaneamente. Contudo, a principal utilidade dessa flexibilidade se deve ao fato de o Sistema Operacional Windows ter seu próprio conjunto de línguas e países, languange_COUNTRY. Sendo assim, podemos especificar dois valores ou mais para dois parâmetros locale ou mais. Durante a execução do script, se o PHP não encontrar o primeiro conjunto no Sistema Operacional, buscará o segundo e assim sucessivamente. Vamos a um exemplo:
//Configura a localização em SO Unix setlocale(LC_ALL, "pt_BR"); //Configura a localização em Windows setlocale(LC_ALL, "ptb_bra"); //Configura a localização em SO Unix e Windows setlocale(LC_ALL, "pt_BR","ptb_bra");
A função strftime( ) formatará a data e hora de acordo com as configurações feitas em setlocale. Seu funcionamento é idêntico à função date( ), vejamos o porquê:
string strftime ( string $format [, int $timestamp ] ),
onde a variável $format receberá o formato de saída da data e $timestamp, que é opcional, receberá o timestamp Unix da data e hora que se deseja exibir. Caso, este valor não seja fornecido, o timestamp Unix atual será padronizado pelo PHP. Vamos ver alguns exemplos de utilização da função strftime( ), lembrando que os parâmetros de formatação são diferentes dos da função date( ):
//Configura a localização em para SO Unix e Windows
setlocale(LC_ALL, "pt_BR","ptb_bra");
echo strftime("%A %a"); // Domingo Dom
echo strftime("%A, %d de %B de %Y"); // Domingo 07 de Agosto de 2011
echo strftime("%a, %d de %b de %y"); // Dom, 07 de Ago de 11
echo strftime("%d.%m.%y"); // 07.08.11
echo strftime("%d, %m, %Y"); // 07, 08, 2011
echo strftime("%d%m%Y"); // 07082011
echo strftime("%d/%m/%Y %H:%M:%S"); // 07/08/2011 18:23:25
echo strftime("%x %X"); // 7/8/2011 18:23:25
echo strftime("%c"); // 7/8/2011 18:23:25
echo strftime("%Y-%m-%d %H:%M:%S"); // 2011-08-07 18:23:25
echo strftime("%w"); // 0 (dia da semana - 0 domingo a 6 sábado)
echo strftime("%W"); // 31 (número da semana do ano 1 a 52/53)
echo strftime("%j"); // 219 (dia do ano 1 a 366)
Nem todas as plataformas suportam timestamps negativos, ou seja timestamps anteriores à Era Unix. Isto significa que %e, %T, %R e %D (e outras mais) e datas anteriores a 1º de Janeiro de 1970 não funcionarão em Windows, algumas distribuições Linux, e alguns outros sistemas operacionais.
Muito obrigado pela sua visita. Espero que o tutorial tenha atendido às suas expectativas.
Deixe seu comentário e inscreva-se no Feed RSS do Scriptmaster.
Abraço e até o próximo tutorial.
Feed RSS
Links Patrocinados
1 Comentário sobre "Como formatar Data e Hora em PHP com setlocale e strftime"
Como formatar Data e Hora em PHP | Script Master - TI que inspira
9 de agosto de 2011 às 14:07h
[...] em outras línguas, devemos usar as funções setlocale() e strftime() em vez de date(). O tutorial Como formatar Data e Hora em PHP com setlocale e strftime trata justamente [...]