Obtendo datas em Português com PHP

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Prefácio

Já é sabido que programadores tendem a fazer gambiarras na hora de traduzir certos termos de uma aplicação, tais como os dias da semana. Foi durante uma conversa com um amigo que percebi que muita gente não sabe obter as datas em português automaticamente. Alterando o local do PHP você pode adquirir as propriedades de determinado país. A função que precisaremos para realizar esta mágica é a setlocale().

Conceito

O código abaixo irá fazer com que as propriedades locais do sistema sejam alteradas para o formato brasileiro.

Em servidores configurados em formato brasileiro, ou seja, que já tem Brazilian Portuguese configurado no locale, apenas a linha 3 poderá ser suficiente.
Em servidores estrangeiros, talvez apenas a linha 4 seja suficiente.

Para deixar o código portável, utilizaremos os dois modos.

<?php

	setlocale(LC_ALL, NULL);
	setlocale(LC_ALL, 'pt_BR');   
	print ucfirst(gmstrftime('%A'));

?>

A função utilizada para puxar os dados da data é a gmstrftime() porque ela leva em consideração o local.
O retorno desta função é o dia da semana, por extenso, em português! :)

LC_ALL é uma constante que indica que as informações locais serão definidas em todas as instâncias. LC_ALL engloba LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC e LC_TIME.

Outras possibilidades com a alteração do local é obter dados monetários. A função localeconv() retorna uma array com as propriedades monetárias da região.

O retorno de

<?php
	print_r(localeconv());
?>

será:

[sourcecode]Array
(
[decimal_point] => ,
[thousands_sep] => .
[int_curr_symbol] => BRL
[currency_symbol] => R$
[mon_decimal_point] => ,
[mon_thousands_sep] => .
[positive_sign] =>
[negative_sign] => –
[int_frac_digits] => 2
[frac_digits] => 2
[p_cs_precedes] => 1
[p_sep_by_space] => 1
[n_cs_precedes] => 1
[n_sep_by_space] => 1
[p_sign_posn] => 3
[n_sign_posn] => 3
[grouping] => Array
(
[0] => 3
)

[mon_grouping] => Array
(
[0] => 3
)

)[/sourcecode]

Conclusão

É possível fazer muitas coisas alterando o local. No Manual do PHP você encontra outras utilizações para estas funções.

Lembrando sempre que é divertido brincar com as funções do PHP! :P

Um grande abraço e uma ótima semana a todos!
Fiquem com Deus!

Rafael Jaques

  • Ah, essa eu jah conhecia…

    =]

  • Mazá Rafa, show de bola cara, isso ajuda muito, evita gambiarras bizarras para tradução =)

  • Oie Rafa,

    Mto bacana o artigo, com certeza é uma boa ajuda!

  • Muito bomm Jaques, to pensando até em entrar para o ramo do PHP =)

    Gostei muito da descrição dos blogs la UAHiuahaIhaiuahia..

    Vlw ae Jaques, abração

  • admin

    Vai dizer, né Jason?

    No Flash tu não consegue as datas em português! :P

  • trOpa de elite OssO durO de rOer…

    pega um pega geral e tb pega vOcê!

    ' hOmens de pretO qual é sua MissãO?

    – entrar nO Blog dO Jaques e Deixar os outros cOmentáriOs nO chãO.

    ' hOmens de pretO O que q vOcê Faz?

    – eu tirO O tOpO deles pq O meu vale mais…

    =))

    FELIZ DIA DO MÚSICO

  • Prinity

    Esquece… rsrs

    Já apareceu :D

  • muito bom esse artigo parabens viu.. me ajudou muito..

  • edyd

    nao funcionou aqui

  • Muito bom mostrou de forma simplificada e resolve bem!!

  • Jefferson Romano

    Me ajudou bastante esse seu post. Eu sabia que tinha que ter uma forma de mudar mas não sabia que tinha que usar a função strftime() para imprimir os resultados de acordo com a localidade.

    Apanhei nisso hj viu.. pense.

    Vlw

  • Jefferson Romano

    Seu botão do Google+ num ta funfando. não consegui dar um up.

  • abymael

    muito bom!

  • Pingback: Obtendo datas em Português | Rodrigo Corrêa e Castro()