Depois de algum tempo estudando a manipulação de datas no php, assunto que creio dá muita dor de cabeça, principalmente a quem tá iniciando e precisa executar tarefas como somar e subtrair datas, resolvi postar aqui algumas funções que escrevi para facilitar a minha vida no desenvolvimento dos meus sistemas.
Vamos lá!
Conversão de formatos de data:
/* FORMATO DE DATA */
Function Geral_Data($Data = '', $Entrada = 'M', $Saida = 'L')
{
# Formatos de Entrada/Saida:
# M => MySQL (formato do banco de dados)
# L => Local (formato do Brasil)
# P => PHP (formato usado nas comparacoes e operacoes de data)
// Validacao
$Formatos = Array('M', 'L', 'P');
If (empty($Data) || !is_string($Data) || $Entrada == $Saida || !in_array($Entrada, $Formatos) || !in_array($Saida, $Formatos))
{ Return $Data; }
// Conversao
Switch ($Entrada)
{ Case 'L':
$Data = explode('/', $Data);
Switch ($Saida)
{ Case 'P': $RT = $Data[1].'/'.$Data[0].'/'.$Data[2]; Break;
Case 'M': $RT = $Data[2].'-'.$Data[1].'-'.$Data[0]; Break; }
Break;
Case 'M':
$Data = explode('-', $Data);
Switch ($Saida)
{ Case 'P': $RT = $Data[1].'/'.$Data[2].'/'.$Data[0]; Break;
Case 'L': $RT = $Data[2].'/'.$Data[1].'/'.$Data[0]; Break; }
Break;
Case 'P':
$Data = explode('/', $Data);
Switch ($Saida)
{ Case 'L': $RT = $Data[1].'/'.$Data[0].'/'.$Data[2]; Break;
Case 'M': $RT = $Data[2].'-'.$Data[0].'-'.$Data[1]; Break; }
Break;
}
Return $RT;
}
Está é útil quando precisamos converter as datas para os formatos do MySQL (Hoje é 2010-09-03) -para, por exemplo gravar no db e depois poder consultar períodos-, PHP (Hoje é 09/03/2010) -formato usado pelas funcoes de tratamento de data do php como mktime()- ou local (Hoje é 03/09/2010).
Conversão data/hora em Timestamp:
Essa é utilíssima quando se trata de executar operações aritiméticas com datas, o Timestamp (data convertida em um valor interior longo) pode ser depois subtraido/somado e assim podemos saber, por exemplo quanto tempo passou de uma data para outra! Legal né?
Exemplo:
<?
$Hoje = date('d/m/Y');
$Agora = Geral_DataTS($Hoje, 0, 0, 0);
$Amanha = Geral_DataTS($Hoje, 5, 0, 0); // mais 5 dias
// Se Passaram -> Valores TS devem ser divididos por 86400
$Passou = ($Amanha - $Agora) / 86400;
Echo 'De '.Geral_TSData($Agora, 'L', 'Data').' para '.Geral_TSData($Amanha, 'L', 'Data').' passou '.$Passou.' dia(s).';
?>
Irá imprimir: "De 03/09/2010 para 08/09/2010 passou 5 dia(s)."
Conversão de Timestamp em data (novamente, após cálculos, por exemplo):
Function Geral_TSData($TS = 0, $Saida = 'L', $RT_Forma = 'Data')
{
# Formatos de Saida:
# M => MySQL (formato do banco de dados)
# L => Local (formato do Brasil)
# P => PHP (formato usado nas comparacoes e operacoes de data)
#
# Formatos de Retorno:
# String => data e hora (se houver) numa string unica
# Data => somente a data no formato de saida
# Hora => somente a hora
# Array => Array com data e hora separados
Switch ($RT_Forma)
{ Case 'String':
Switch ($Saida)
{ Case 'L': $RT = date('d/m/Y H:i:s', $TS); Break;
Case 'P': $RT = date('m/d/Y H:i:s', $TS); Break;
Case 'M': $RT = date('Y-m-d H:i:s', $TS); Break;
Default: $RT = date('d/m/Y H:i:s', $TS); }
Break;
Case 'Data':
Switch ($Saida)
{ Case 'L': $RT = date('d/m/Y', $TS); Break;
Case 'P': $RT = date('m/d/Y', $TS); Break;
Case 'M': $RT = date('Y-m-d', $TS); Break;
Default: $RT = date('d/m/Y H:i:s', $TS); }
Break;
Case 'Hora':
$RT = date('H:i:s', $TS);
Break;
Case 'Array':
Switch ($Saida)
{ Case 'L': $RT['Data'] = date('d/m/Y', $TS); Break;
Case 'P': $RT['Data'] = date('m/d/Y', $TS); Break;
Case 'M': $RT['Data'] = date('Y-m-d', $TS); Break;
Default: $RT['Data'] = date('d/m/Y H:i:s', $TS); }
$RT['Hora'] = date('H:i:s', $TS);
Break;
}
Return $RT;
}
Esta transforma um valor Timestamp em data novamente. Por fim, estas duas são usadas pela funções acima para validar se o valor passado para a função realmente é data e/ou hora válida:
Validação:
/* DATA => Deve ser passado em formato local com "/" */
Function Geral_ValidaData($Data = '')
{
If (empty($Data) || !is_string($Data))
{ Return 0; }
$Data = explode('/', $Data);
If (!checkdate($Data[1], $Data[0], $Data[2]))
{ Return 0; } Else { Return 1; }
}
/* HORA => Deve ser passado em formato local com ":" */
Function Geral_ValidaHora($Hora = '')
{
If (empty($Hora) || !is_string($Hora) || strpos($Hora, ':') === False)
{ Return 0; }
$Hora = explode(':', $Hora);
If ((!is_numeric($Hora[0]) || $Hora[0] < 0 || $Hora[0] > 60) || (!is_numeric($Hora[1]) || $Hora[1] < 0 || $Hora[1] > 60) || (!is_numeric($Hora[2]) || $Hora[2] < 0 || $Hora[2] > 60))
{ Return 0; } Else { Return 1; }
}
É isso ai, espero ajudar a quem tem pro ai com as datas! Se alguém se dispuser a transformar tudo isso numa classe, acho que facilitará mais pra os iniciantes. Post ai o que achou, erros ou sugestões para melhorar! Abraço a todos, até a próxima.
Pergunta
Fernando Lima (IPIS)
Olá pessoal,
Depois de algum tempo estudando a manipulação de datas no php, assunto que creio dá muita dor de cabeça, principalmente a quem tá iniciando e precisa executar tarefas como somar e subtrair datas, resolvi postar aqui algumas funções que escrevi para facilitar a minha vida no desenvolvimento dos meus sistemas.
Vamos lá!
Conversão de formatos de data:
Está é útil quando precisamos converter as datas para os formatos do MySQL (Hoje é 2010-09-03) -para, por exemplo gravar no db e depois poder consultar períodos-, PHP (Hoje é 09/03/2010) -formato usado pelas funcoes de tratamento de data do php como mktime()- ou local (Hoje é 03/09/2010). Conversão data/hora em Timestamp: Essa é utilíssima quando se trata de executar operações aritiméticas com datas, o Timestamp (data convertida em um valor interior longo) pode ser depois subtraido/somado e assim podemos saber, por exemplo quanto tempo passou de uma data para outra! Legal né? Exemplo: Irá imprimir: "De 03/09/2010 para 08/09/2010 passou 5 dia(s)." Conversão de Timestamp em data (novamente, após cálculos, por exemplo): Esta transforma um valor Timestamp em data novamente. Por fim, estas duas são usadas pela funções acima para validar se o valor passado para a função realmente é data e/ou hora válida: Validação:É isso ai, espero ajudar a quem tem pro ai com as datas! Se alguém se dispuser a transformar tudo isso numa classe, acho que facilitará mais pra os iniciantes. Post ai o que achou, erros ou sugestões para melhorar! Abraço a todos, até a próxima.
Att.
Fernando.
:D
Editado por Fernando Lima (IPIS)Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.