Prefácio
Tenho visto que muitas pessoas têm tido problemas ao trabalhar com data. Seja pelo fato de não saber ao certo quantos dias o mês tem ou por se atrapalhar na contagem de dias de um mês para outro.
O que algumas pessoas não sabem, é que o PHP é extremamente bom com datas.
Para realizarmos nossa experiência de hoje, precisaremos de apenas duas funções!
“Duas funções, Rafael?” Sim, duas funções!
E são as seguintes: date() e mktime(). É bastante provável que a maioria das pessoas já tenha utilizado as duas, mas muita gente não sabe o poder que as duas têm juntas!
Conceito
Já ouviu falar na Unix Epoch? A “Época Linux” começou dia 1º de Janeiro de 1970.
“Ta, e daí?”
E daí que graças a ela, podemos efetuar cálculos precisos de data. Todas as vezes que você invoca a função mktime(), ela retorna o total de segundos que se passaram desde o começo da Unix Epoch. Mas do que adiantam os segundos? Aí que vem a parte boa. A função date() pode formatar datas baseadas na Unix Epoch!
Colocando a mão na massa
Vamos supor que queremos descobrir que dia será daqui 47 dias. Vamos usar o mktime() com seus devidos parâmetros para encontrar a data de hoje. Sempre assumiremos horas, minutos e segundos com 0 (zero), porque isto indica exatamente o início do dia. :)
Depois de encontrar a data, iremos calcular quanto é 47 dias em segundos. Depois somamos e convertemos para uma data formatada usando date().
<?php
$hoje = mktime(0, 0, 0, 11, 5, 2007); // dia 05/11/2007 em Unix Time Stamp
$somar = 60 * 60 * 24 * 47; // 60 segundos * 60 minutos * 24 horas * 47 dias
$daqui47dias = $hoje + $somar;
echo date('d/m/Y', $daqui47dias);
?>
Mais fácil que formatar computador! ;)
Conclusão
Simples e eficiente. É claro que você pode explorar muito mais possibilidades com estas duas funções… E também é claro que ficou muito simples este tutorial, mas é apenas o primeiro. Não queria deixar a galera no vácuo…
O próximo vai ser sobre Expressões Regulares e prometo que vai ser mais bacana! :)
Muito obrigado pessoal!
Um forte abraço e fiquem com Deus!
Rafael Jaques
Shows!!! Vou fazer um script pra saber qual é o dia do meu aniversário!! hehe
Mazááá Rafa, show de bola esse teu script, afinal antes dele sempre estivemos numa batalha para desvendar um algoritmo capaz de resolver isso para nós hehehe
Abraço
Olá.
Tem algo bem bacana que é a funcao strtotime. Veja no manual http://br.php.net/manual/pt_BR/function.strtotime…
Flw
Não vou comentar sobre o post mas sobre o autor. Pois, nos últimos anos vejo nosso amigo Rafael, acumulando conhecimento e experiências e a cada dia se tornanado um profissional e uma pessoa melhor.
Jaques, este site será no decorrer do tempo um site referência na área com certeza.
Sucesso meu garoto!!
Oie…
vou imitar o meu querido prof. Carlos .
não vou comentar do post pq … sabe neh… boiei
ahhh mas do Rafas
sim… um pequeno grande genio …
super sucesso pra ti…
jah sou tua fãaa
e o phpit jah ta nos favoritos
Bjao
"Não saber ao certo quantos dias o mês tem" oO, tá me tirando rapá? ahsuehause
Tri massa cara, mas ainda quero aquele texto sobre como mandar e-mails pro Gmail, via php ;)
Ah, também sei que tu ainda quer aquele texto sobre o uso da crase ;P
Abraço!
É isso aí Jaques…. já vou começar a utilizar, porque tive uma situação de calculo de dadas no sistema que estou montando…
Realmente eu sempre olhei para o nome desta função e nunca corri atrás de estuda-lá mais a fundo, mas este seu "simples tutorial" já deu para mudar o meu conceito de formatação de datas…
Valeu…
fiz um teste com o script do jeito q está ai e deu diferença no meu calculo … ai dei uma modificadinha e criei uma funçao …
<?php
function calculaData($dat){
$hoje = mktime(0, 0, 0, date("d"),date("m"),date("Y"));
// dia 05/11/2007 em Unix Time Stamp
$somar = 60 * 60 * 24 * $dat;
// 60 segundos * 60 minutos * 24 horas * 47 dias
$calculo_dias = $hoje + $somar;
return date('d/m/Y', $calculo_dias);
}
echo calculaData(2);
?>
Realmente gostei muito da sua iniciativa de dividir seu conhecimento com simples mortais como eu . Vou acompanhar as suas dicas de php. Parabens pela iniciativa. Diego Izac – Mateus Leme MG