Ho una quantità totale di millisecondi (cioè 70370) e voglio visualizzarlo come minuti: secondi: millisecondi cioè 00: 00: 0000.Come formattare una quantità di millisecondi in minuti: secondi: millisecondi in PHP?
Come posso farlo in PHP?
Ho una quantità totale di millisecondi (cioè 70370) e voglio visualizzarlo come minuti: secondi: millisecondi cioè 00: 00: 0000.Come formattare una quantità di millisecondi in minuti: secondi: millisecondi in PHP?
Come posso farlo in PHP?
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.
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
?>
@Kamil - I inline il codice in modo che sia qui per i posteri. –
btw - Non ho idea di cosa stia facendo 'preg_replace'. Sembra piuttosto strano –
@Dominic - Grazie. Lo farò la prossima volta. –
Credo che ci sia alcuna funzione incorporata per millisecondi di formattazione in PHP, è necessario utilizzare la matematica .
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);
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);
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);
Abbiamo sbagliato, hai ragione;) ++ 1 –
Sarebbe ancora un hack, ma puoi usare 'gmdate()' se sei sicuro che i tuoi valori saranno inferiori a 24 ore. – soulmerge
Perfetto! Grazie mille! – designvoid