Datatime diff

Olá
O que exatamente a função diff do objeto datatime retorna?
Criei um formulário onde o usuário digita duas datas e preciso aplicar uma porcentagem sobre elas.
Criei uma nova variável usando o método diff e estou mutiplicando pela porcentagem diária mas está dando erro.
A função não retorna a diferença em dias?
É possível fazer cálculos com o resultado direto ou tenho que fazer alguma coisa antes?
Obrigado

Um objeto do tipo DateTimeInterval

Vc consegue obter a diferença em dias usando o atributo público d, exemplo:

<?php
$ontem = new DateTime('-1 day');
$hoje = new DateTime('now');
$diff = $ontem->diff($hoje);
echo 'Diferença em dias de ontem para hoje: ', $diff->d;

Para ter um panorama geral dos valores gravados em diff basta:

<?php
...
print_r($diff);
1 curtida
<?php
	$bem = $_POST ['bem'];
	$dataCompra = $_POST ['dataCompra'];
	$vlrCompra = $_POST ['vlrCompra'];
	$dataVenda = $_POST ['dataVenda'];
	$vlrVenda = $_POST ['vlrVenda'];
	$txDepre = $_POST ['txDepre'];
	$alqIR = $_POST ['alqIR'];
	
	
	$dataInicial = new DateTime($dataCompra);
	print_r($dataInicial) . '</br>';
	$dataFinal = new DateTime($dataVenda);
	print_r($dataFinal) . '</br>';
	$periodo = $dataInicial -> diff($dataFinal);
	print_r($periodo). '</br>';
	echo 'Diferença em dias: ', $periodo->d;
	
	?>

//RESULTADO

DateTime Object ( [date] => 2014-10-03 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/London )
DateTime Object ( [date] => 2016-06-09 00:00:00.000000 [timezone_type] => 3 [timezone] => Europe/London )
DateInterval Object ( [y] => 1 [m] => 8 [d] => 6 [h] => 0 [i] => 0 [s] => 0 [f] => 0 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 615 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 )

Está certo o que estou fazendo? o valor que preciso é o 615, então uso ->days ou invés de ->d ?

Bom se está certo ou não vc é quem vai definir, agora alguns pontos importantes para não ter calculo errado:

Seus datetime estão com horário de Londres, vc está na inglaterra? Se está no brasil e em SP por exemplo vc precisa definir o timezone antes…

<?php
date_default_timezone_set('America/Sao_Paulo');
...

Agora, se seu fuso é diferente, o doc traz uma lista com seu pais/estado é só procurar…

Quanto ao days ou d, te mostrei o print_r justamente para ver qual se encaixa melhor no seu problema (pelo que diz a documentação é o melhor para vc)…

Outra forma de criar um datetime direto do seu valor…

...
$dataInicial = DateTime::createFromFormat('d/m/Y', $_POST ['dataCompra']); //pt_br
$dataInicial = DateTime::createFromFormat('Y-m-d', $_POST ['dataCompra']); //universal

Muito obrigado!

1 curtida

Deixei uma dica no final do post anterior beleza? Vai brincando e conhecendo mais api e leia sempre a documentação, sucesso!

http://php.net/manual/pt_BR/datetime.createfromformat.php

1 curtida