PHP DateTime & Locale
O objeto nativo do PHP DateTime não suporta internacionalização, ou seja, quando se executa o método $dateTime->format(), não existe uma maneira de se trazer o formato do idioma definido no servidor, feito no PHP com a função nativa setLocale.
Quando é necessária a internacionalização de datas uma alternativa é utilizar a função nativa do PHP strftime, a qual recebe como parametros o formato e o timestamp. Para substituir o format do DateTime, mais uma coisa deve ser levada em consideração: a sintaxe da string do formato é diferente. O format do DateTime utiliza a sintaxe definida pelo objeto nativo do PHP Date, já o strftime utiliza a sintaxedefinida no padrão UNIX.
Lembrando que para o setlocale funcionar, o servidor onde o PHP está instalado, deve ter esse idioma configurado.
Para consultar os idiomas em um servidor de sistema operacional base UNIX execute o comando no terminal:
Caso você queira configurar um idioma que não esteja na lista como por exemplo "pt_BR" execute a seguinte comando no terminal:
Tendo o idioma configurado, você pode executar a função setlocale no PHP, sendo que o primeiro parâmetro é a categoria, que no nosso caso pode ser LC_ALL ou LC_TIME, e o segundo parâmetro o idioma que no nosso caso é "pt_BR".
Concluindo, o DateTime não tem a capacidade de formatar com internacionalização mas é possível utilizar outros recursos do PHP e se for o caso, criar uma classe que substitua o DateTime. Essa classe pode herdar a classe DateTime e sobrescrever os métodos de maneira adequada. Ou essa classe pode apenas ter como atributo um objeto do tipo DateTime e implementar os métodos que forem necessários. Segue abaixo um exemplo do segundo caso:
Quando é necessária a internacionalização de datas uma alternativa é utilizar a função nativa do PHP strftime, a qual recebe como parametros o formato e o timestamp. Para substituir o format do DateTime, mais uma coisa deve ser levada em consideração: a sintaxe da string do formato é diferente. O format do DateTime utiliza a sintaxe definida pelo objeto nativo do PHP Date, já o strftime utiliza a sintaxedefinida no padrão UNIX.
Lembrando que para o setlocale funcionar, o servidor onde o PHP está instalado, deve ter esse idioma configurado.
Para consultar os idiomas em um servidor de sistema operacional base UNIX execute o comando no terminal:
$ locale -a
$ sudo locale-gen ru_pt_BR
Concluindo, o DateTime não tem a capacidade de formatar com internacionalização mas é possível utilizar outros recursos do PHP e se for o caso, criar uma classe que substitua o DateTime. Essa classe pode herdar a classe DateTime e sobrescrever os métodos de maneira adequada. Ou essa classe pode apenas ter como atributo um objeto do tipo DateTime e implementar os métodos que forem necessários. Segue abaixo um exemplo do segundo caso:
<?php namespace Date; class Date { private $dateTime; public function __construct($time = null, $object = null, $format = null, $timestamp = null) { if ($time === null && $object === null && $format && $timestamp) { $dateTime = \DateTime::createFromFormat($format, $timestamp); if ($dateTime instanceof \DateTime) { $this->dateTime = new \DateTime($time, $object); $this->dateTime->setTimestamp($dateTime->getTimestamp()); } } else { $this->dateTime = new \DateTime($time, $object); } } public function format($format, $locale = false) { if ($locale) { setlocale(LC_TIME, $locale); return strftime($format, $this->dateTime->getTimestamp()); } return $this->dateTime->format($format); } public function getTimestamp() { return $this->dateTime->getTimestamp(); } public function setTimestamp($param) { $this->dateTime->setTimestamp($param); } public function getDateTime() { return $this->dateTime; } }
Novo Comentário: