Ir para conteúdo

POWERED BY:

Arquivado

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

chodos

Calcular intervalo entre datas

Recommended Posts

Olá pessoal, não tenho muita expriência com PHP então tava precisando da ajuda de vcs...

Preciso calcular o tempo decorrido entre duas datas, sendo que só pode ser considerado o tempo dentro do horário comercial, ou seja tem que ser descontado o periodo entre 18:00h e 08:00h e os fins de semana.

 

Fiz a seguinte função:

- onde $ab é a data inicial e a data final o momento em que estamos

 

function calcTemp ($ab)
{

		 $agora = time();

		 for ($a=$ab;$a<$agora;$a=$a+300){
			 $dia_da_semana = date("w", $a);
			 $hora = date("H", $a);

			 if (($dia_da_semana != 0) && ($dia_da_semana != 6)){
				if ((($hora >= 8) && ($hora < 12)) || (($hora > 13) && ($hora < 18))){
				   $temp=$temp+300;
				}
			 }
		 }
		 return $temp;

}

Esse código está funcionando, mas não está nem um pouco funcional :wacko: ... para poucas datas e periodos curtos ele funciona bem, mas vou trabalhar com cerca de 20 intervalos ou mais e é ai que a coisa não funciona...

Alguém teria uma sugestão??? O que e como eu poderia mudar???

Obrigado!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

 

class Date_Hour{

 

function IncDec( $src1 = '', $src2 = '', $output = '' ){

 

$i['Y'] = 'years';

$i['m'] = 'months';

$i['d'] = 'days';

$i['H'] = 'hours';

$i['i'] = 'minutes';

$i['s'] = 'seconds';

 

if( !is_array( $src1 ) or $src1 == '' ){

$src1 = array(

'Y' => date('Y')

,'m' => date('m')

,'d' => date('d')

,'H' => date('H')

,'i' => date('i')

,'s' => date('s')

);

}

if( !is_array( $src2 ) or $src2 == '' ){

$src2 = array(

'Y' => 0

,'m' => 0

,'d' => 0

,'H' => 0

,'i' => 0

,'s' => 0

);

}

 

foreach( $src2 as $k => $v )

{

$factor[] = '+' . $v . ' ' . $i[$k];

}

 

$output == '' ? $output = 'Y-m-d H:i:s' : '';

 

$date1 = mktime( $src1['H'], $src1['i'], $src1['s'], $src1['m'], $src1['d'], $src1['Y'] );

$rs = strtotime( implode( ' ', $factor ), $date1 );

 

return date( $output, $rs );

 

 

/** usage

sample

$src1 = array(

'Y' => date('Y')

,'m' => date('m')

,'d' => date('d')

,'H' => date('H')

,'i' => date('i')

,'s' => date('s')

);

 

// for decrease, put negative values

$src2 = array(

'Y' => 0 // years

,'m' => 0 // minutes

,'d' => 0 // days

,'H' => 2 // hours

,'i' => 0 // minutes

,'s' => 0 // seconds

);

 

print_r( Date_Hour::IncDec( $src1, $src2, 'H' ) ); // output hour only

print_r( Date_Hour::IncDec( $src1, $src2, 'H:i' ) ); // hour and minute only

print_r( Date_Hour::IncDec( $src1, $src2, 'Y-m-d' ) ); // Year, Month and Day ...

 

 

references:

http://php.net/mktime

http://php.net/implode

http://php.net/date

http://php.net/strtotime

http://php.net/is_array

*/

}

 

}

?>

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.