Script Master – TI que inspira - Tutoriais de qualidade para desenvolvedores Web que utilizam PHP, HTML, CSS, MySQL, JavaScript, AJAX, Frameworks, SEO, Blogs, CMS e IDEs para desenvolvimento.

Como formatar Data e Hora em PHP com setlocale e strftime

Em: PHP

8 ago 2011

No ú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( ).

Data e hora em qualquer idioma

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.

Use o setlocale( ) para definir a localização padrão

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:

  • LC_MONETARY – padronização monetária. No Brasil, R$ 1.250,00, nos EUA, $1,250.00 e na Itália, EUR 1.250,00;
  • LC_NUMERIC – padronização numérica. No Brasil, 1.250,00, nos EUA, 1,250.00 e na Europa, EUR 1.250,00;
  • LC_CTYPE – padroniza a classificação e conversão de caracteres.
  • LC_TIME – padroniza a data e hora. A data 07 de agosto de 2011 é representada nos EUA como 08-07-2011, no Brasil como 07/08/2011, Europa e diversos outros países do mundo como 07-08-2011.
  • LC_ALL – configura as regras de localização para todas as categorias anteriores. E é a que vamos utilizar nos nossos exemplos.

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:

  • pt_BR.iso-8859-1 – português do Brasil com conjunto de caracteres iso-8859-1 ou simplesmente pt_BR;
  • de_DE – alemão;
  • nl_NL – Holanda.

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");

Use o strftime( ) para fomatar a data e hora em qualquer idioma

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)

Dica importante sobre a função strftime( )

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.

OrkutShare

Posts Relacionados:

  1. Como formatar Data e Hora em PHP

Feed RSS


Links Patrocinados

1 Comentário sobre "Como formatar Data e Hora em PHP com setlocale e strftime"

Avatar

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

Deixe um comentário

Posts por E-mail

Categorias