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);
<?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!
Deixei uma dica no final do post anterior beleza? Vai brincando e conhecendo mais api e leia sempre a documentação, sucesso!