Original: Diogo Machado – http://www.diogomachado.com/blog/como-trabalhar-com-a-classe-datetime-do-php-e-facilitar-sua-vida.html


Como trabalhar com a classe DateTime do PHP e facilitar sua vida

Você já se viu tendo problemas com datas quanto está programando em PHP, antes tinhamos que fazer tudo com a função date() e isso era extremamente cansativo e as vezes dava errado. Pensando nisso que existe a classe DateTime do PHP5, essa classe trabalha de forma maravilhosamente bem com datas e horas, e você pode com poucas linhas resolver grandes problemas, sem precisar de fazer POG. POG: Programação orientada a gambiarras

Instanciando um objeto DateTime.

$data = new Datetime();

Por padrão, internamente ele irá vir com um parâmetro NOW, que irá gerar data e hora atual. Se você quiser fazer algo específico, você pode chamar assim (se você reparar, ele gera um DateTime com a hora vazia):

$data = new Datetime('2014-08-01');

Caso você queira comparar também o horário, você pode fazer isso:

$data = new Datetime('2014-08-01'.Date('Y-m-d'));

Data formatada padrão brasileiro pt-br

$data = new Datetime('2014-08-01');
echo $data->format('d/m/Y');

Alterar uma data de um objeto já instanciado

$data = new Datetime('2014-08-01'.Date('H:i:s'));
$data->modify('1 days')

Podemos utilizar days, weeks, months, years para alterar a data. O sinal negativo pode ser passado antes do número para retroceder a data.

$data = new Datetime('2014-08-01'.Date('H:i:s'));
$data->modify('-1 days')

Comparando datas

Diferente do que faziamos antes, com o Date, agora no DateTime ficou muito mais seguro comparar datas

// Repare que ele vai criar datas com time zerado
$data['inicio'] = new Datetime('2014-08-01');
$data['fim']    = new Datetime('2014-08-10');

if ($data['fim'] > $data['inicio']){
	echo "Correto!";
}

Criando intervalos

$data['inicio'] = new Datetime('2014-08-01');
$data['fim']    = new Datetime('2014-08-10');

// Intervalo de 1 dia
$interval = new DateInterval("P1D");

// Crio um array com as datas do periodo definido
$periodoVigente = new DatePeriod($data['inicio'], $interval ,$data['fim']);

// Agora, percorro o array, pegando apenas datas acima ou igual hoje
foreach ($periodoVigente as $dataPeriodo) 
{
	if ($dataPeriodo >= $data['hoje'])
	{
		$dias[] = $dataPeriodo;
	}
}

echo "<pre>";
var_dump($dias);
echo "</pre>";

O DateInterval vai definir o salto, neste caso estamos dizendo um salto de 1 dia quando colocamos P1D. O formato começa com a letra P, de “período”. Cada período de duração é representada por um valor inteiro seguido por um designador período. Se a duração contém elementos de tempo, a porção da especificação é precedido pela letra T.

Parâmetro Descrição
Y Anos
M Meses
D Dias
W Semanas
H Horas
M Anos
S Segundos

Criando intervalos sem final de semana

// Transforma em datetime
$data['inicio'] = new Datetime('2014-08-01');
$data['fim']    = new Datetime('2014-08-15');

// Adiciona um dia, porque o array do foreach começa de 0
$data['fim']->modify('1 days');

// Intervalo de 1 dia
$interval = new DateInterval("P1D");

// Crio um array com as datas do periodo definido
$periodoVigente = new DatePeriod($data['inicio'], $interval ,$data['fim']);

// Agora, percorro o array, pegando apenas datas
foreach ($periodoVigente as $dataPeriodo) 
{
	// Se não for final de semana (php >= 5.1)
	if (!(date('N', strtotime($dataPeriodo->format('Y-m-d'))) >= 6))
	{
		if ($dataPeriodo >= $data['hoje'])
		{
			$dias[] = $dataPeriodo->format('d/m/Y');
		}
	}
}
Anúncios

Escrito por zrhans

Professor at UFSM

Deixe um comentário

Faça o login usando um destes métodos para comentar:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s