Resolvi me adiantar e escrever um pouco sobre a manipulação de datas e tempo (hora) no php, coisas do cotidiano de um desenvolvedor.
1 – Data e Hora Atual
Pelo básico temos date(“d/m/Y”) resultando em ex: 01/01/2007, sendo d,m,Y representando dia, mês e ano na tabela de caracteres do parâmetro de formatação da função date.
d, exibe o dia sendo exibidos 2 digitos, ex: ao invés de 1 é exibido 01
m, exibe o mês sendo exibidos 2 digitos, ex: ao invés de 1 é exibido 01
Y, exibe o ano por extenso, 4 digitos, ex: 2007, utilizando y minúsculo teremos resultado 07
Na mesma lógica temos date(“h:i:s”) exibindo a hora atual do sistema, resulando em ex: 01:01:50, temos então ,h,i,s representando hora, minutos e segundos respectivamente, tendo:
h, exibe o hora sendo exibidos 2 digitos, ex: ao invés de 1 é exibido 01
i, exibe os minutos sendo exibidos 2 digitos, ex: ao invés de 1 é exibido 01
s, exibe os segundos sendo exibidos 2 digitos, ex: ao invés de 1 é exibido 01
É possível brincar de infinitas formas com o posicionamento dos parâmetros e situações que a data será exibida, ex: date(“d/m/Y h:i:s”) que irá exibir data e hora no formato convencional ou date(“Y-m-d h:i:s”) que retorna o padrão do MySQLcampo DateTime.
2 – Dia da Semana (Extenso) a partir da Data
Costumo utilizar a seguinte função (retornar dia da semana por extenso):
/*
Função que retorna o dia da semana
Formato da data deverá ser Y-m-d
*/
function Semana($data) {
$rs = strftime('%w',strtotime($data));
switch($rs) {
case "0": $s = "Domingo"; break;
case "1": $s = "Segunda-feira"; break;
case "2": $s = "Terça-feira"; break;
case "3": $s = "Quarta-feira"; break;
case "4": $s = "Quinta-feira"; break;
case "5": $s = "Sexta-feira"; break;
case "6": $s = "Sábado"; break;
}
return $s;
}
Função muito simples que usa os recursos do strtotime (string to time) e do strftime (string format time), para usar basta passar a data pro formato que eu utilizei ou adaptar a função para fazé-lo automaticamente, não fiz isso pois utilizo funções de conversão, mostradas mais abaixo, mais ai vai o exemplo:
echo Semana(2007-11-08); // Retorna Quinta-Feira
3 – Formata data, para MySQL (Date) e Formulários
Aqui serão exibidas duas funções, uma que converte a data no formato DateTime do MySQL para nosso padrão 01/01/2007 e outra que passa o padrão DateTime do MySQL para nosso padrão convencional.
3.1 – Formato Date do MySQL para Padrão Convencional
/*
Função que converte Y-m-d para d/m/Y
Utilizado para manipular datas no formato Date do MySQL
exibindo no formato convencional.
*/
function dtPadrao($data) {
$data = trim($data);
if (strlen($data) < 10)
{
$rs = "";
}
else
{
$arr_data = explode(" ",$data);
$data_db = $arr_data[0];
$arr_data = explode("-",$data_db);
$data_form = $arr_data[2]."/".$arr_data[1]."/".$arr_data[0];
$rs = $data_form;
}
return $rs;
}
Usando:
echo dtPadrao("2007-11-08"); // Retornará 08/11/2007
3.2 – Padrão Convencional para formato Date do MySQL
/*
Função que converte d/m/Y para Y-m-d
Utilizado para inserir datas do tipo converncional em
campos tipo Date do MySQL
*/
function dtBanco($data) {
$data = trim($data);
if (strlen($data) != 10)
{
$rs = "";
}
else
{
$arr_data = explode("/",$data);
$data_banco = $arr_data[2]."-".$arr_data[1]."-".$arr_data[0];
$rs = $data_banco;
}
return $rs;
}
Usando:
echo dtBanco("08/11/2007"); // Resultará 2007-11-08
Espero ter ajudado, pois explicar linha a linha dessas funções é pedir demais.
4 – Operações Básicas com Datas (Somar e Subtrair Dias)
Existe N formas de se fazer isso, com N formas de desenvolver uma função para isso, então o que eu vou passar é a que eu justamente uso no meu dia a dia.
4.1 – Operações em cima da Data Atual
echo strftime("%d/%m/%Y", strtotime("+1 days")); // Hoje mais 1 dia
echo strftime("%d/%m/%Y", strtotime("-2 days")); // Hoje menos 2 dias
echo strftime("%d/%m/%Y %H:%M:%S", strtotime("+1 month 1 days 1 hours 1 minutes"));
// Hoje + 1 mes, 1 dia, 1 hora e 1 minuto.
Simples.
4.2 – Operações em cima de qualquer Data.
Para somar dias a uma data temos (no exemplo foi passado +1 dia):
/*
Função para somar datas em dias
Data no formato Y-m-d
*/
function dtSomar($data,$dias) {
$data = str_replace("-","",$data);
$ano = substr ( $data, 0, 4 );
$mes = substr ( $data, 4, 2 );
$dia = substr ( $data, 6, 2 );
$novaData = mktime ( 0, 0, 0, $mes, $dia + $dias, $ano );
return strftime("%Y-%m-%d", $novaData);
}
Usando (formato da data será Y-m-d):
echo dtSomar("2007-01-10",1); // Resultará 2007-01-11
Para subtrair dias a uma data temos (no exemplo foi passado -1 dia):
/*
Função para subtrair datas em dias
Data no formato Y-m-d
*/
function dtSubtrair($data,$dias) {
$data = str_replace("-","",$data);
$ano = substr ( $data, 0, 4 );
$mes = substr ( $data, 4, 2 );
$dia = substr ( $data, 6, 2 );
$novaData = mktime ( 0, 0, 0, $mes, $dia - $dias, $ano );
return strftime("%Y-%m-%d", $novaData);
}
Usando (formato da data será Y-m-d):
echo dtSubtrair("2007-01-10",1); // Resultará 2007-01-11
5 – Quantidade de Dias de um Determinado Mês
Uma vez perguntaram isso em um desses foruns e percebi que poderia ser mais fácil que eu imaginava, fui caça no mktime descobri isso:
echo date("t", mktime(0, 0, 0, 1, 1, 2007));
// Retornará a quantida de dias do mês de janeiro do ano de 2007
0, 0, 0, 1, 1, 2007, Representa 1-1-2007 ou seja, vai pegar a quantidade de dias presentes no mês de janeiro mais verificando o ano para ver se é bissexto
Detalhe é necessário preencher o dia.
5 – Finalizando
A cada função utilizada eu tentei ao máximo inserir um link para a referência oficial do php.net em português, espero que tenham reparado.
Caso não compreenda alguma função utilize:
http://br2.php.net/NOME_DA_FUNÇÃO
Gostaria também de dizer que as funções aqui apresentadas eu utilizo a anos, muitos anos, algumas (a maioria) eu mesmo elaborei, talvez uma eu não me recordo seja de fonte de autoria desconhecida.
Lembrando também que pode ser que chegue um doido aqui e fale que uma função dessas da para simplificar a uma linha, eu iria ficar feliz.