Ir para conteúdo

POWERED BY:

Arquivado

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

gremio10

[Resolvido] Descobrir a diferença entre horas

Recommended Posts

Tente assim amigo gremio.

 

Array
(
   [0] => 10:55:20
   [1] => 11:01:49
   [2] => 10:58:18
   [3] => 10:58:20
   [4] => 16:21:40
   [5] => 00:00:00
   [6] => 16:35:53
   [7] => 23:53:31
)

function diffHours($hourA, $hourB){
   date_default_timezone_set('UTC');
   return date('H:i:s',(strtotime($hourA)-strtotime($hourB)));
}

print_r($array);
print_r(diffHours($array[1],$array[0]));
print_r(diffHours($array[3],$array[2]));
print_r(diffHours($array[5],$array[4]));
print_r(diffHours($array[7],$array[6]));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ae amigo gremio :clap: :cake:

Compartilhar este post


Link para o post
Compartilhar em outros sites
function diffHours($hourA, $hourB){
   date_default_timezone_set('UTC');
   return date('H:i:s',(strtotime($hourA)-strtotime($hourB)));
}

function soma($hourA, $hourB){
   date_default_timezone_set('UTC');
   return date('H:i:s',(strtotime($hourA)+strtotime($hourB)));
}

print_r($array);
$a = diffHours($array[1],$array[0]);
$b = diffHours($array[3],$array[2]);

echo (soma($b,$a));

//imprime

Array
(
   [0] => 10:55:20
   [1] => 11:01:49
   [2] => 10:58:18
   [3] => 10:58:20
   [4] => 16:21:40
   [5] => 00:00:00
   [6] => 16:35:53
)
17:38:15

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz os testes amigo gremio, e vi que para fazer os 2 ao mesmo tempo

terá que fazer algumas modificações.

 

function calcHour($hourA, $hourB){
   return (strtotime($hourA)-strtotime($hourB));
}

function diffHours($hour) {
   date_default_timezone_set('UTC');
   return date('H:i:s',$hour);
}

function sumHours($hourA, $hourB){
   date_default_timezone_set('UTC');
   return date('H:i:s',($hourA+$hourB));
}

//Para teste faça
$a = calcHour(date('H:i:s'),'09:20:04');
$b = calcHour(date('H:i:s'),'10:20:04');
$c = diffHours($a);
$d = diffHours($B);
$e = sumHours($a,$B);

echo $c.'<br />'.$d.'<br />'.$e;

Veja que eu separei a função que faz o calculo das

que mostram a soma e a diferença. Isto porque para somar

é necessario que seja a diferença de cada hora em timestamp.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo amigo gremio, se não for exibir a diferença entre as horas você pode até eliminar

a função diffHours pois com a calcHour e a sumHours você já consegue oque precisa.

 

Veja como fica mais facil para você trabalhar. Para debugar e verificar se a soma

esta certa diffHours ajuda.

 

Não cheguei a testar mas por utilizar o timestamp, acredito que a soma só de certo até 23:59:59 horas. Caso a soma chegue a 24h eu imagino que o resultado seja 00:00:00.

 

Se sua necessidade for uma soma maior que 23:59:59 aconselho a fazer os calculos via MySQL

como sugeriu o amigo Kineri.

 

Ex:

 

--
-- Estrutura da tabela `times`
--

CREATE TABLE IF NOT EXISTS `times` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `hora1` time NOT NULL,
 `hora2` time NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci ;

--
-- Extraindo dados da tabela `times`
--

INSERT INTO `times` (`id`, `hora1`, `hora2`) VALUES
(1, '16:00:00', '10:00:00'),
(2, '16:18:51', '09:25:15');

Apartir desta tabela de testes faça a seguinte query:

 

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(`hora1`,`hora2`)))) AS soma FROM times

Desta forma é possível obter o mesmo resultado porém soma mais de 24hs.

 

Abraços.

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.