Para quem nunca viu a página “Mea Culpa” deste blog, sou acadêmico de Ciência da Computação na UFMS, e após um grande sufoco, consegui progredir de série. Agora posso desfrutar de 2 “longos” meses de descanso, da faculdade. O trabalho não para, ainda bem.
Para quebrar o marasmo, segue abaixo três funções em PHP que criei hoje para corrigir um problema na formatação de datas em uma página web.
Os dois primeiros são triviais, conversão de datas do padrão brasileiro para o padrão SQL:
function data_to_sql($sdata)
{
$data = explode('/', $sdata);
$data = implode('-', array_reverse($data));
return $data;
}
//converte data do formato SQL para o brasileiro
function data_from_sql($sdata)
{
$data = explode('-', $sdata);
$data = implode('/', array_reverse($data));
return $data;
}
E o terceiro é um pouco mais interessante, ele pode ser usado quando você quer montar um cabeçalho do tipo: quinta-feira, 12 de dezembro de 2009. O PHP fornece uma função nativa para isso, a função strftime(), mas ela tem como dependência um servidor com suporte a locale, e no meu caso, o locale pt_BR. Para contornar isso, fiz a seguinte função que resolve automáticamente a melhor forma de apresentar o cabeçalho desejado (considerando que strftime tem melhor desempenho do que algumas chamadas a função date(), time() e concatenação de strings):
/*
* monta cabeçalho para impressao da data em portugues
*
* @param $sdata time, passa a data desejada
* @param $week boolean, se irá conter o nome da semana ou não
* @return $data string, a data formatada para impressao
*/
function data_header($sdata, $week = false)
{
$months = array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');
$weeks = array('Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado');
$data = '';
//se possuir suporte a setlocale com a região brasil, utiliza a função nativa
if(setlocale(LC_TIME, "pt_BR"))
{
if($week)
$strformat = '%A, %d de %B de %Y';
else
$strformat = '%d de %B de %Y';
$data = strftime($strformat,$sdata);
}
else
{
if($week)
$data .= strtolower($weeks[date('w', $sdata)]) . ', ';
$data .= date('j', $sdata) . ' de ' . strtolower($months[date('n', $sdata)-1]) . ' de ' . date('Y', $sdata);
}
return $data;
}
São funções simples mas que podem quebrar um galho em um dia apertado.