Trabalhando com Datas no PHP - #1 Entendendo a classe DateTime
11/05/2019No tutorial de hoje trabalharemos com a manipulação de datas no PHP. Iremos ver a forma procedural e orientada a objetos.
Forma procedural
A maneira mais simples de utilizar datas no PHP é usando a função date. Para realizar operações podemos usar a função strtotime e para definir o fuso horário local usamos a função date_default_timezone_set
date_default_timezone_set("America/Sao_Paulo");
echo date("Y-m-d H:i:s");
echo date("d/m/Y");
$now=strtotime(date("Y-m-d H:i:s"));
$otherDate=strtotime("2019-05-09 19:20:30");
echo $now.'
';
echo date("Y-m-d H:i:s",$now);
if($now > $otherDate){
echo "A data".date("d/m/Y",$now)."é maior!";
}else{
echo "A data atual é menor!";
}
Repare no código acima que podemos utilizar o strtotime pra realizar operações e comparações com data.
Forma orientada a objetos
Pra trabalhar com datas de forma orientada a objetos, podemos utilizar 03 classes principais DateTime, DateInterval e DateTimeZone. Veja alguns exemplos:
$now=new DateTime("now",new DateTimeZone("America/Sao_Paulo"));
$dateAdd=$now->add(new DateInterval("P10DT3H"))->format("d/m/Y H:i");
A classe DateTime tem vários métodos interessantes, entre eles os mais usados são: format, modify, add, sub e diff. Veja os exemplos abaixo:
$now=new DateTime("now",new DateTimeZone("America/Sao_Paulo"));
$otherDate=new DateTime("2019-05-07 17:00:00",new DateTimeZone("America/Sao_Paulo"));
//Format
$dateBr=$now->format("d/m/Y");
$timeBr=$now->format("H:i");
$dateOtherBr=$now->format("d/m/Y H:i");
echo "Fulano falou as ".$timeBr." do dia ".$dateBr;
//Modify
$dateModify=$now->modify("+3 days")->format("d/m/Y");
$dateModify=$now->modify("-20 days")->format("d/m/Y");
$dateModify=$now->modify("+1 year +1 month +10 days +30 minutes")->format("d/m/Y H:i");
$dateModify=$now->modify("last day of next month")->format("d/m/Y H:i");
$dateModify=$now->modify("first day of this month")->format("d/m/Y H:i");
echo $dateModify;
//Add and Sub
$dateAdd=$now->add(new DateInterval("P10DT3H"))->format("d/m/Y H:i");
$dateSub=$now->sub(new DateInterval("P10DT3H"))->format("d/m/Y H:i");
echo $dateSub;
//Diff
$dateDiff=$now->diff($otherDate);
var_dump($dateDiff);
if($dateDiff->m > 2){
echo "Sua conta foi bloqueada!";
}else{
echo "Ok";
}
Sucesso nos códigos e na vida!