2009-12-02 24 views

risposta

32

non cadere nella trappola di usare funzioni di data per questo! Quello che hai qui è un intervallo di tempo, non una data. L'approccio ingenuo è quello di fare qualcosa di simile:

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

ma perché la funzione di data viene utilizzato per (gasp!) Date, non gestisce ora il modo in cui si vuole che in questa situazione - ci vuole i fusi orari e l'ora legale, ecc., in considerazione durante la formattazione di una data/ora.

Invece, probabilmente si vuole solo fare alcune semplici di matematica:

$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

Abbiamo sbagliato, hai ragione;) ++ 1 –

+0

Sarebbe ancora un hack, ma puoi usare 'gmdate()' se sei sicuro che i tuoi valori saranno inferiori a 24 ore. – soulmerge

+0

Perfetto! Grazie mille! – designvoid

1

Prova questa funzione per visualizzare quantità di millisecondi nel modo che piace:

<?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 - I inline il codice in modo che sia qui per i posteri. –

+0

btw - Non ho idea di cosa stia facendo 'preg_replace'. Sembra piuttosto strano –

+1

@Dominic - Grazie. Lo farò la prossima volta. –

1

Credo che ci sia alcuna funzione incorporata per millisecondi di formattazione in PHP, è necessario utilizzare la matematica .

0

Come menzionato nel manuale:

u microsecondi (aggiunto in PHP 5.2.2) Esempio: 654321

Abbiamo un 'u' parametro per la funzione

data()

Esempio:

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

Se si utilizza P HP 5.3 si può fare uso dell'oggetto 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

Come si ottengono $ secondi? Devi convertire $ millis in $ secondi, vero? –

+0

@daemonfire: Thx per indicare. Dovrebbe funzionare ora. – soulmerge

+1

Se si usa 70370 come $ millisecondi qui si ottiene 00: 00: 70: 037 ... non dovrebbe aggiungere 70 secondi a 1 minuto? – barfoon

1

Perché perdere tempo con date() e la formattazione quando si può semplicemente usare la matematica? se $ms è il tuo numero di millisecondi

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