Pplware

PHP é à quinta-feira – Trabalhar com Datas

Por Pedro Peixoto para o PPLWARE

É impensável viver num mundo em que não existissem datas, em que não tivéssemos um calendário como forma de organização diária, de facto, as datas estão presentes em quase tudo, e como tal é muito comum necessitarmos de as usar nas nossas aplicações PHP.

Sendo conhecido pela sua simplicidade e flexibilidade, o PHP torna muito fácil trabalhar com datas, bastando duas ou três funções para fazer preencher a maioria das necessidades dos programadores.

Esta semana vamos aprender algumas das funções mais simples e importantes para a manipulação de datas em PHP.

Existe uma quantidade enorme de funções para o tratamento de datas em PHP, aqui, vamos aprender apenas as mais simples e importantes. Mais uma vez, o objectivo do artigo é introduzir o leitor num determinado tema PHP, para que depois ele próprio possa explorar e aprofundar os seus conhecimentos sobre esse mesmo tema.

Antes de começar, vamos apenas entender a diferença entre um formato de data legível pelos humanos e o unix timestamp. Convencionámos ao longo dos anos que determinados formatos de representação sugerem um determinado instante ou um dia, um mês, um ano. No entanto, esses formatos são de difícil tratamento, uma vez que obedece a uma estrutura complexa com meses com diferente número de dias, anos com mais ou menos um dia, etc…

Surgiu, assim a necessidade de simplificar a representação de datas, para podermos tratá-las informaticamente. O mais famoso é o Unix timestamp, vulgarmente chamado apenas timestamp, e é também muito fácil de entender, no fundo é um número com a contagem dos segundos desde o dia 1 de Janeiro de 1970 às 00:00:00 sendo este o timestamp 0. Assim se subtrairmos o timestamp de ontem ao 12:00:00 ao de hoje ao 12:00:00, iremos obter o número de segundos que passaram entre os dois instantes, neste caso 86400 (1 dia). Torna-se assim simples a manipulação e o tratamento de datas. De seguida vamos conhecer algumas funções que tornam possível estas manipulações:

Time

Talvez a função mais simples seja a função “time”, esta função não recebe parâmetros pois retorna apenas o timestamp, mas é sem dúvida muito útil, seja em conjunto com outras funções ou mesmo em casos onde necessitamos apenas do timestamp.

echo time(); //mostra o timestamp actual, ou seja os segundos que passaram até agora desde 1 de Janeiro de 1970
Strtotime

Esta função permite a conversão de inúmeros formatos de data em timestamp, assim, sempre que temos que tratar uma data (formato humano), esta função é uma grande ajuda. É uma função bastante versátil porque interpreta uma grande diversidade de formatos de data, o que a torna uma das minhas favoritas.

echo strtotime(“now”); //devolve o timestamp actual, equivalente a time(); echo strtotime(“2011-02-12 07:00:03”); //converte a data no seu timetamp, ou seja, nos segundos que passaram desde 1 de Janeiro de 1970 até ela.

Pode inclusive ser usada para pequenos cálculos:

echo strtotime("+1 day"); //devolve o timestamp de amanhã
echo strtotime("+1 week"); //devolve o timestamp da próxima semana
echo strtotime("next Thursday"); // devolve o timestamp da próxima quinta
echo strtotime("last Monday"); // devolve o timestamp da última segunda

Todos os cálculos são feitos relativamente à data actual, por isso quando pedimos “strtotime(“+1 day”);”, é-nos devolvida a data de amanhã. Contudo, esta função permite ainda que lhe seja passado um segundo parâmetro (timestamp) que serve como referência de partida para os cálculos, assim, por exemplo, para o dia 2011/05/12, vamos calcular o seu timestamp:

$timestp=strtotime(“2011/05/12”);

Agora já colocar este timestamp como referência de cálculo:

echo strtotime("+1 day" , $timestp); //devolve o timestamp de 2011/05/13
echo strtotime("+1 week" , $timestp); //devolve o timestamp da semana seguinte a 2011/05/12
echo strtotime("next Thursday" , $timestp); // devolve o timestamp quinta-feira seguinte ao 2011/05/12

echo strtotime("last Monday" , $timestp); // devolve o timestamp segunda-feira anterior a 2011/05/12

Podemos assim usar uma cadeia de “strtotime” de forma a realizar qualquer cálculo necessário. Esta é sem dúvida uma função poderosa.

Date

A função “date” é, em conceito, uma função de formatação de data, mas na prática é muito mais que isso, e em conjunto com as anteriores, torna todas as operações possíveis. Esta função é o contrário da “strtotime” já que permite converter um timestamp em data compreensível pelos humanos, assim:

echo date("Y-m-d H:i:s",strtotime("+1 day”) ); //Devolve a data de amanhã

O primeiro parâmetro indica o formato, enquanto que o segundo é o timestamp a converter. Existem inúmeros formatos que podem ser usados e que estão disponíveis na página da função. Se não for passado o segundo parâmetro, a função toma como referência o momento actual, vejamos:

echo date("l"); // “l” devolve o dia da semana->”Thursday”
echo date("d (l)"); // “d” devolve o dia, “l” devolve o dia da semana, ficaria “19 (Thursday)”
echo date("M y"); // “M” devolve a abreviatura do mês, “y” devolve o ano com dois dígitos, ficaria “May 11”
echo date("l \\t\h\e jS"); //o caracter “\” permite escrever texto pelo meio do formato, “j” devolve o dia do mês sem zeros, e o S devolve o sufixo ordinal (st, nd, rd or th), ficaria “Thursday the 3rd”.

Podemos facilmente fazer o echo de um rodapé de copyright recorrendo a esta função:

echo ’copyright ©’ . date("Y"); //copyright ©2011
Conclusão

Estas 2 últimas funções possibilitam praticamente todas as operações de datas que sejam necessárias em PHP, depois de um estudo aprofundado de cada uma delas e com um pouco de raciocínio é possível fazer cálculos impressionantes. No entanto existem muitas outras que também merecem atenção. Deixamos referenciadas a date_diff, date_add, mktime, microtime, entre outras também muito importantes.

Sem dúvida que este é um tema bastante abrangente mas as portas estão abertas…

Vocês já conheciam estas funções? Costumam trabalhar muito com elas?

Exit mobile version