Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, gostaria de uma ajuda para diferenciar dois campos datetimes um de entrada e outro de saída,
e a diferença inserir em um campo datetime "Total", eu já olhei alguns tópicos sobre a classe diff mas não entendi muito bem, alguém pode me ajudar?
obrigado.
meu código ficou desta maneira :
$dataInicial = new DateTime($open_date);
$dataFinal = new DateTime($close_date);
$dateInterval = $dataInicial->diff($dataFinal);
$datetotal = $dateInterval ->format('%Y-%m-%d %H:%i:%s');
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE chamados set cli_cham = ?, fun_cli_cham = ?, ana_cham = ?,dt_fnl_cham = ?, temp_cham = ? WHERE id_cham = ?";
$q = $pdo->prepare($sql);
$q->execute(array($cli,$fun_cli_cham,$ana_cham,$close_date,$datetotal,$id));
Database::disconnect();
header("Location: index.php");
no banco ele é inserido esse valor: 2000-00-00 05:00:00, agora se faço o mesmo código que me passou no form de visualização e dou um echo na variável de comparação ele me traz a diferença correta : 00-0-0 00:25:24, mas essa diferença não insere no banco, sabe o que pode ser?
DateInterval é diferente de DATE, DATETIME, TIMESTAMP ou qualquer outro formato de data do mysql. Nesse caso, você deve inserir apenas horas, pode utilizar o formato TIME.
Deu certo, muito obrigado pela ajuda!
para conseguir somar as datas eu utilizo o timestamp?
valeu!
Me dê um exemplo de soma.
Estou controlando a abertura e finalização de chamados, então eu pego a diferença desses campos datetime e salvo eles em um campo "tempototal", agora vou gerar um relatório para saber quanto tempo de atendimento teve para a empresa "x", então preciso somar os datetimes onde estão gravados no "tempototal".
Ex:
tenho um campo com o valor de tempototal='0000-00-00 03:07:22' e o segundo chamado dele tem o tempototal='0000-00-00 01:10:00'
preciso que ele some esses campos em uma varialvel $total
e dê um echo, aparecendo na tela o valor 0000-00-00 04:17:22.
Para tempos, eu não salvo como DateTime, e sim apenas como Time, pois terá de trabalhar com horas. Considerando o atendimento de 2 dias, no caso seriam 48 horas (48:00:00).
Já no PHP, você poderia fazer utilizando DateInterval, no seu caso, fica até um pouco mais fácil.
Você deve transformar seus tempos em DateInterval, terá de adicionar os tokens P e T, dessa forma:
$dateInterval1 = new DateInterval("P0000-00-00T03:07:22");
$dateInterval2 = new DateInterval("P0000-00-00T01:10:00");
Depois a função abaixo para somar N DateIntervals:
/**
* soma N dateIntervals
* @param DateInterval $augend
* @param DateInterval $addend
* @param DateInterval $_,...
* @return DateInterval
* @author Gabriel Heming <gabriel.heming@hotmail.com>
**/
function sumDateInterval(DateInterval $augend , DateInterval $addend , DateInterval $_ = null) {
$start = clone $end = new \DateTime();
$numArgs = func_num_args();
$addend = func_get_args();
for($i = 0 ; $i < $numArgs ; $i++) {
$end->add($addend[$i]);
}
return $end->diff($start , true);
}
E o uso final:
$dateInterval1 = new DateInterval("P0000-00-00T03:07:22");
$dateInterval2 = new DateInterval("P0000-00-00T01:10:00");
$total = sumDateInterval($dateInterval1 , $dateInterval2);
echo $total->format('%H:%I:%S');
Saída:
04:17:22
Obrigado mesmo cara!
Aqui há um exemplo de como verificar a diferença entre duas datas:
http://forum.imasters.com.br/topic/484930-strtotime-calculando-errado/?p=1925980