2009-12-02 22 views

Respuesta

32

no caigan en la trampa de utilizar las funciones de fecha para esto! Lo que tienes aquí es un intervalo de tiempo, no una fecha. El enfoque ingenuo es hacer algo como esto:

date("h:i:s.u", $mytime/1000) 

pero debido a que la función de fecha se utiliza para (¡oh!) Fechas, que no maneja el tiempo de la manera que usted quiere que en esta situación - que se necesita zonas horarias y ahorros de luz diurna, etc., en cuenta al formatear una fecha/hora.

En cambio, es probable que sólo quieren hacer algunas matemáticas simples:

$input = 70135; 

$uSec = $input % 1000; 
$input = floor($input/1000); 

$seconds = $input % 60; 
$input = floor($input/60); 

$minutes = $input % 60; 
$input = floor($input/60); 

// and so on, for as long as you require. 
+0

Estábamos equivocados, tiene razón;) ++ 1 –

+0

Todavía sería un truco, pero puede usar 'gmdate()' si está seguro de que sus valores serán de menos de 24 horas. – soulmerge

+0

¡Perfecto! ¡Un millón de gracias! – designvoid

1

Prueba esta función para mostrar la cantidad de milisegundos a su gusto:

<?php 
function udate($format, $utimestamp = null) 
{ 
    if (is_null($utimestamp)) { 
     $utimestamp = microtime(true); 
    } 

    $timestamp = floor($utimestamp); 
    $milliseconds = round(($utimestamp - $timestamp) * 1000000); 

    return date(preg_replace('`(?<!\\\\)u`', sprintf("%06u", $milliseconds), $format), $timestamp); 
} 

echo udate('H:i:s.u'); // 19:40:56.78128 
echo udate('H:i:s.u', 654532123.04546); // 16:28:43.045460 
?> 

Source

+0

@Kamil - Me inlined el código por lo que es aquí para la posteridad. –

+0

por cierto - que no tienen idea de lo que está haciendo 'preg_replace'. Parece bastante extraño. –

+1

@Dominic - Gracias. Lo haré la próxima vez. –

1

Creo que no hay ninguna función integrada de milisegundos de formato en PHP, tendrá que usar las matemáticas .

0

Como se menciona en el manual:

Microsegundos U (añadido en PHP 5.2.2) Ejemplo: 654321

Tenemos un parámetro 'u' para la función de fecha()

Ejemplo:

if(($u/60) >= 60) 
{ 
$u = mktime(0,($u/360)); 
} 
date('H:i:s',$u); 
4

Si está utilizando P HP 5.3 se puede hacer uso del objeto DateInterval:

list($seconds, $millis) = explode('.', $milliseconds/1000); 
$range = new DateInterval("PT{$seconds}S"); 
echo $range->format('%H:%I:%S') . ':' . str_pad($millis, 3, '0', STR_PAD_LEFT); 
+0

¿Cómo obtienes $ segundos? Tienes que convertir $ millis en $ segundos, ¿no? –

+0

@daemonfire: Thx para señalar. Debería funcionar ahora – soulmerge

+1

Si usa 70370 como $ milisegundos aquí, obtiene 00: 00: 70: 037 ... ¿no deberían agregarse 70 segundos a 1 minuto? – barfoon

1

por qué utilizar los date() y el formato cuando se puede usar las matemáticas? si $ms es el número de milisegundos

echo floor($ms/60000).':'.floor(($ms%60000)/1000).':'.str_pad(floor($ms%1000),3,'0', STR_PAD_LEFT); 
Cuestiones relacionadas