PHP - Campo datetime

   
Vista:

Campo datetime

Publicado por racingman (14 intervenciones) el 29/08/2012 20:59:41
Buenas tardes,

Necesito realizar lo siguiente. En la base de datos tengo 2 campos, uno seria la hora de salida y la segunda hora de llegada.

Necesito trabajar con centésimas de segundo, y por lo que veo DATATIME solo permite horas, minutos y segundos.

Como lo podría hacer?

He pensado que al introducir la hora de salida como de llegada, convertirlo a centésimas para guardarlo en la base de datos y mediante php realizar la resta y convertirlo de nuevo a formato hora.

Pero me gustaria saber si hay algun otro modo de poder realizarlo mas comodamente.

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

Campo datetime

Publicado por zendi (824 intervenciones) el 30/08/2012 03:23:15
utiliza este: time() y comentanos eh!!!
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
Imágen de perfil de xve

Campo datetime

Publicado por xve (5515 intervenciones) el 30/08/2012 07:24:06
Hola, time() te devolvera los segundos desde 1/1/1970, pero seran segundos...

si quires trabajar con milisegundos, puedes utilizar: microtime(); o date('u');

Saludos
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

Campo datetime

Publicado por racingman (14 intervenciones) el 30/08/2012 14:12:37
He realizado la siguiente funcion, y va bien, pero tengo un pequeño problema:

funcion.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function RestarHoras($horaini,$horafin)
{
    $horai=substr($horaini,0,2);
    $mini=substr($horaini,3,2);
    $segi=substr($horaini,6,2);
    $deci=substr($horaini,9,3);
 
    $horaf=substr($horafin,0,2);
    $minf=substr($horafin,3,2);
    $segf=substr($horafin,6,2);
    $decf=substr($horafin,9,3);
 
    $ini=(((($horai*60)*60)*1000)+(($mini*60)*1000)+($segi*1000)+$deci);
    $fin=(((($horaf*60)*60)*1000)+(($minf*60)*1000)+($segf*1000)+$decf);
 
    $dif=$fin-$ini;
 
    $difh=floor($dif/3600000);
    $difm=floor(($dif-($difh*3600000))/60000);
    $difs=floor(($dif-($difh*3600000)-($difm*60000))/60000);
    $difd=floor($dif-($difh*3600000)-($difm*60000)-($difs*10000));
    return date("H:i:s.u",mktime($difh,$difm,$difs,$difd));
}


A la hora de devolver los datos, me sale todo bien menos los milisegundos, esto es lo que me sale:

Hora de salida: 21:10:00.000
Hora de llegada: 21:19:00.110
Diferencia: 01:00:00.000000

Aparte de no realizar bien el calculo de los milisegundos le salen 6 digitos.

Despues he comprobado realizar el return del siguiente modo y algo mejor si va:

1
return ($difh<10?'0'.$difh:$difh).':'.($difm<10?'0'.$difm:$difm).':'.($difs<10?'0'.$difs:$difs).'.'.($difd<10?'00'.$difd:$difd);


Hora de salida: 21:10:00.000
Hora de llegada: 21:19:00.110
Diferencia: 00:09:00.110

Todo correctamente, pero si por ejemplo las milésimas son entre 10 y 99 tengo el siguiente problema:

Hora de salida: 21:10:00.000
Hora de llegada: 21:19:00.99
Diferencia: 00:09:00.99

En vez de dar 00:09:00.099 me da 00:09:00.99, que podría dar a confusiones con 00:09:00.990.

No se si se podría cambiar ($difd<10?'00'.$difd:$difd) para que cuando sean superior o igual a 10 o inferior a 100 le ponga un 0 por delante como hago cuando es inferior a 10.

Y ya por dejarlo mejor...cuando la diferencia de horas es 0 se podria hacer para que no salgan los ceros?

Por ejemplo:

Hora de salida: 21:10:00.000
Hora de llegada: 21:19:00.110
Diferencia: 09:00.110

Muchas gracias
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