PHP - ayuda calculo entre horas y fechas de la bd

   
Vista:

ayuda calculo entre horas y fechas de la bd

Publicado por rodrigo (2 intervenciones) el 13/03/2013 15:55:36
hola buenas tardes tengo un problemilla en un codigo de calculo entre 2 horas
lo que pasa es que si calculo bien pero cuando pasa mas de un dia no los cuenta

ejemplo de resultado: 0 días 0: 6:43 hrs
y cuando pasa mas de un días quedaría haci: -0 dias 0: 6:43 hrs
no sale de 0 los días solo quiero que cuente los días también

los datos de las horas los trae de registros en la base de datos dependiendo de los diferentes estados (1,2,3,4,5)

el problema es que ese código no calcula la fecha por en de no muestra los días que pasaron y por eso siempre queda en 0.
en la base de datos también guardo la fecha pero no se como unirla al código para que reste y diga ohh paso 1 día 6: 9: 1 hrs

el resultado se muestra en un reporte donde toma el tiempo con el estado anterior para ver si cumplio o no con los tiempos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
	error_reporting(0);
 
	function resta($inicio, $fin){
		$dif=date("H:i:s", strtotime("00:00:00") + strtotime($fin) - strtotime($inicio) );
		return $dif;
	}
 
	function str2ts( $time ) {
		$atime = explode(':', $time);
		return mktime((int)$atime[0], (int)$atime[1], (int)$atime[2]);
	}
 
	function ts_time_diff( $ts_after, $ts_before ) {
		global $pers;
		if( !isset($pers) )
			$pers = array(array(60, ':%2d hrs'), array(60, ':%2d'), array(24, '%d'),'%d dias ');
		$str_diff = '';
		$ts_diff = $ts_after - $ts_before;
		if( $bln_neg = $ts_diff < 0 )
			$ts_diff *= -1;
		for( $i = 0; $i < count($pers) - 1; $i ++ ) {
			$str_diff = sprintf($pers[$i][1], $ts_diff % $pers[$i][0]). $str_diff;
			$ts_diff = (int)$ts_diff / $pers[$i][0];
		}
		$str_diff = sprintf($pers[$i], $ts_diff). $str_diff;
		return ($bln_neg ? '-' : ''). $str_diff;
	}
 
	function buscaHora($codigo,$folio,$hora,$r=false){
		include_once 'mySQLData.php';
 
		$info2 		= 	array();
		$info2[0] 	= 	'1';
		$info2[1] 	= 	'2';
		$info2[2] 	= 	'3';
		$info2[3] 	= 	'4';
		$info2[4] 	= 	'5';
 
		$min 		=	array();
		$min[0]		=	30;
		$min[1]		=	60;
		$min[2]		=	120;
		$min[3]		=	180;
		$min[4]		=	210;
 
		$key 		= 	0;
 
		foreach ($info2 as $k => $v) {
			if($v == $codigo)
				$key = $k;
		}
 
		if($key>0){
			$key--;
			$base = new mySQLData();
			$sql = "SELECT hora FROM registro WHERE folio = '{$folio}' AND codigo_estado = '{$info2[$key]}' ";
			$result = $base->consulta($sql);
			$arreglo = mysql_fetch_assoc($result);
			if($r){
				return ( str2ts($hora)-str2ts($arreglo['hora']) )/60 > $min[$key+1] ? 1:0;
			}
			else{
				if(ts_time_diff( str2ts($hora),str2ts($arreglo['hora']))!='0')
					echo ts_time_diff( str2ts($hora),str2ts($arreglo['hora']) );
				else
					return 0;
			}
		}
		else{
			return 0;
		}
	}
?>


de antemano muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

ayuda calculo entre horas y fechas de la bd

Publicado por xve (5520 intervenciones) el 13/03/2013 18:52:33
Hola Rodrigo me cuesta un poco seguir tu codigo, pero aqui tienes una función que hace exactamente lo que quieres:
http://www.lawebdelprogramador.com/codigo/PHP/2016-Diferencia_entre_dos_fechas_en_formato_dias,_horas,_minutos_.html

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda calculo entre horas y fechas de la bd

Publicado por rodrigo (2 intervenciones) el 13/03/2013 20:35:02
no me sirvio o no supe bien como ocuparla lo siento mi conocimiento no es muy amplio en php :/

esta funcion es la resta :)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function ts_time_diff( $ts_after, $ts_before ) {
		global $pers;
		if( !isset($pers) )
			$pers = array(array(60, ':%2d hrs'), array(60, ':%2d'), array(24, '%d'),'%d dias ');
		$str_diff = '';
		$ts_diff = $ts_after - $ts_before;
		if( $bln_neg = $ts_diff < 0 )
			$ts_diff *= -1;
		for( $i = 0; $i < count($pers) - 1; $i ++ ) {
			$str_diff = sprintf($pers[$i][1], $ts_diff % $pers[$i][0]). $str_diff;
			$ts_diff = (int)$ts_diff / $pers[$i][0];
		}
		$str_diff = sprintf($pers[$i], $ts_diff). $str_diff;
		return ($bln_neg ? '-' : ''). $str_diff;
	}



esta son los estados (1,2,3,4,5) y sus tiempo q tienen q cumplicar cada uno los q salen $min
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function buscaHora($codigo,$folio,$hora,$r=false){
		include_once 'mySQLData.php';
 
		$info2 		= 	array();
		$info2[0] 	= 	'1';
		$info2[1] 	= 	'2';
		$info2[2] 	= 	'3';
		$info2[3] 	= 	'4';
		$info2[4] 	= 	'5';
 
		$min 		=	array();
		$min[0]		=	30;
		$min[1]		=	60;
		$min[2]		=	120;
		$min[3]		=	180;
		$min[4]		=	210;
 
		$key 		= 	0;
 
		foreach ($info2 as $k => $v) {
			if($v == $codigo)
				$key = $k;
		}


lo que queda es la consulta donde trae la hora para restarla y yo verla en el reporte


este es el codigo q ocupo en el reporte para mostar la resta muestra rojo o verde segun si cumple su tiempo o no (eso esta en un css)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php if( isset( $rs )) {
  		$tfolio = 0;
		include_once 'calculo.php';
 
   while ($row=mysql_fetch_object($rs)):
 
   	if( $tfolio != $row->folio) :
   		$tfolio = $row->folio;
 
   ?>
 
<tr class="<?=buscaHora($row->codigo_estado, $row->folio, $row->hora,true)==0?'success':'error';?>" >
 
 <td><?php echo buscaHora($row->codigo_estado, $row->folio, $row->hora); ?></td>


pero como se fijaron solo estoy calculando la hora y necesito agregar la fecha por que los resultados me los trae de esta manera -0 dias 2:47: 9 hrs
en la base de datos tengo el campo fecha(aparte del de la hora)

gracias ojala me entiendan :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar