Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Lopes

Classe Diff - diferenciar campos datetimes

Recommended Posts

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.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me dê um exemplo de soma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.