time()
è in secondi: c'è uno in millisecondi?Come ottenere l'ora corrente in millisecondi in PHP?
risposta
Use microtime()
. Questa funzione restituisce una stringa separata da uno spazio. La prima parte è la parte frazionaria di secondi, la seconda parte è la parte integrale. Passano in true
di ottenere un numero:
var_dump(microtime()); // string(21) "0.89115400 1283846202"
var_dump(microtime(true)); // float(1283846202.89)
Beware of perdita di precisione, se si utilizza microtime(true)
.
There is also gettimeofday()
che restituisce la parte in microsecondi come numero intero.
var_dump(gettimeofday());
/*
array(4) {
["sec"]=>
int(1283846202)
["usec"]=>
int(891199)
["minuteswest"]=>
int(-60)
["dsttime"]=>
int(1)
}
*/
Come altri hanno già detto, è possibile utilizzare microtime()
per ottenere precisione micrometrica su timestamp.
Dai tuoi commenti, sembra che tu voglia come UNIX Timestamp ad alta precisione. Qualcosa come DateTime.Now.Ticks
nel mondo .NET.
È possibile utilizzare la seguente funzione per farlo:
function millitime() {
$microtime = microtime();
$comps = explode(' ', $microtime);
// Note: Using a string here to prevent loss of precision
// in case of "overflow" (PHP converts it to a double)
return sprintf('%d%03d', $comps[1], $comps[0] * 1000);
}
Esattamente ciò che è necessario. – shamittomar
Questo è il modo per farlo! – tonix
perrrrrrrfect .. ♥. –
Usa microtime(true)
in PHP 5, o la seguente modifica in PHP 4:
array_sum(explode(' ', microtime()));
Un modo portabile di scrivere che il codice avrebbe essere:
function getMicrotime()
{
if (version_compare(PHP_VERSION, '5.0.0', '<'))
{
return array_sum(explode(' ', microtime()));
}
return microtime(true);
}
La risposta breve è:
$milliseconds = round(microtime(true) * 1000);
@FredrikWendt, penso che tu stia confondendo con 'time()'. 'microtime (true)' d'altra parte restituisce l'ora corrente in secondi da quando l'epoca di Unix è accurata al microsecondo più vicino (vedi riferimento PHP). In realtà è molto facile da testare se si esegue il codice sopra in un ciclo e si visualizzano i millisecondi. –
Ho assolutamente fatto! :-) –
Mi piace la risposta breve. –
Utilizzare questa:
function get_millis(){ list($usec, $sec) = explode(' ', microtime()); return (int) ((int) $sec * 1000 + ((float) $usec * 1000)); }
Bye
Risposta breve: solo
64 piattaforme bit!
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
Risposta lunga:
Se si desidera una funzione equilvalent di time()
in millisecondi prima devi considerare che come time()
restituisce il numero di secondi trascorsi dal momento che il "tempo di un'epoca (01/01/1970), il numero di millisecondi poiché il "tempo storico" è un numero elevato e non si adatta a un intero a 32 bit.
La dimensione di un numero intero in PHP può essere 32 o 64 bit a seconda della piattaforma.
Da http://php.net/manual/en/language.types.integer.php
Le dimensioni di un intero dipende dalla piattaforma, anche se un valore massimo di circa due miliardi è il valore usuale (che è 32 bit firmati). Le piattaforme a 64 bit di solito hanno un valore massimo di circa 9E18, ad eccezione di Windows, che è sempre a 32 bit. PHP non supporta gli interi senza segno. La dimensione intera può essere determinata utilizzando la costante PHP_INT_SIZE e il valore massimo utilizzando la costante PHP_INT_MAX da PHP 4.4.0 e PHP 5.0.5.
Se avete 64 bit interi allora si può utilizzare la seguente funzione:
function milliseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000 + ((int)round($mt[0] * 1000));
}
microtime()
restituisce il numero di secondi dal momento che il "tempo di epoca" con una precisione fino a microsecondi con due numeri separati da uno spazio , ad esempio ...
0.90441300 1409263371
Il secondo numero è i secondi (numero intero) preceduti dalla parte decimale.
La funzione milliseconds
prendere la parte intera moltiplicato per 1000
1409263371000
e aggiunge la parte decimale moltiplicato per 1000
e arrotondato a 0 decimali
1409263371904
noti che sia $mt[1]
e il risultato di round
sono castati a int
. Ciò è necessario perché sono float
s e l'operazione su di essi senza il cast comporterebbe la restituzione di una float
.
Infine, tale funzione è leggermente più preciso rispetto
round(microtime(true)*1000);
che con un rapporto di 1:10 (circa.) Restituisce 1 millisecondo più che il risultato corretto. Ciò è dovuto alla precisione limitata del tipo float (microtime(true)
restituisce un float). Ad ogni modo se si preferisce ancora il round(microtime(true)*1000);
più corto suggerirei di trasmettere a int
il risultato.
Anche se è al di là della portata della questione vale la pena ricordare che, se la vostra piattaforma supporta 64 bit interi allora si può anche ottenere il tempo corrente in microsecondi senza incorrere nel troppo pieno.
Se il fatto 2^63
(circa il numero intero con segno più grande) diviso per 10^6 * 3600 * 24 * 365
(circa i microsecondi in un anno) restituisce ca. 292471
.
Questo è lo stesso valore restituito da echo PHP_INT_MAX/(1000000*3600*24*365);
In altre parole un intero con segno hanno spazio per memorizzare un periodo di oltre 200 mila anni misurato in microsecondi.
Potrebbe essere quindi
function microseconds() {
$mt = explode(' ', microtime());
return ((int)$mt[1]) * 1000000 + ((int)round($mt[0] * 1000000));
}
perché non solo: ' function getMilliEpoch() { $ mt = explode ('', microtime()); ritorno $ mt [1]. substr ($ mt [0], 0, 5) * 1000; } ' – Michael
$timeparts = explode(" ",microtime());
$currenttime = bcadd(($timeparts[0]*1000),bcmul($timeparts[1],1000));
echo $currenttime;
NOTA: PHP5 è necessario per questa funzione a causa dei miglioramenti con microtime() e il modulo bc matematica è anche il termine (come siamo trattando con grandi numeri, puoi verificare se hai il modulo in phpinfo).
Spero che questo ti aiuti.
$the_date_time = new DateTime($date_string);
$the_date_time_in_ms = ($the_date_time->format('U') * 1000) +
($the_date_time->format('u')/1000);
E 'davvero come riempire tre zeri a destra? – Zeeshan
Niente affatto. Converte entrambe le parti in millisecondi e fornisce la somma. Quindi è più preciso di aggiungere zero. – user3767296
Sebbene questo snippet di codice possa risolvere la domanda, [includendo una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entally-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni! –
provare questo:
public function getTimeToMicroseconds() {
$t = microtime(true);
$micro = sprintf("%06d", ($t - floor($t)) * 1000000);
$d = new DateTime(date('Y-m-d H:i:s.' . $micro, $t));
return $d->format("Y-m-d H:i:s.u");
}
echo date('Y-m-d H:i:s.') . gettimeofday()['usec'];
uscita:
2016-11-19 15:12:34.346351
Utilizza lo stesso timestamp: '$ t = gettimeofday(); data dell'eco ('Y-m-d H: i: s.', $ t ['sec']). $ T [ 'usec']; ' –
Questo funziona anche se si è a 32 bit PHP:
list($msec, $sec) = explode(' ', microtime());
$time_milli = $sec.substr($msec, 2, 3); // '1491536422147'
$time_micro = $sec.substr($msec, 2, 6); // '1491536422147300'
Nota questo non fornisce numeri interi, ma stringhe. Tuttavia questo funziona in molti casi, ad esempio quando si costruiscono URL per le richieste REST.
Se sono necessari numeri interi, PHP a 64 bit è obbligatorio.
Quindi è possibile riutilizzare il codice di cui sopra e cast (int):
list($msec, $sec) = explode(' ', microtime());
// these parentheses are mandatory otherwise the precedence is wrong!
// ↓ ↓
$time_milli = (int) ($sec.substr($msec, 2, 3)); // 1491536422147
$time_micro = (int) ($sec.substr($msec, 2, 6)); // 1491536422147300
Oppure si può utilizzare il buon vecchio' one-liner:
$time_milli = (int) round(microtime(true) * 1000); // 1491536422147
$time_micro = (int) round(microtime(true) * 1000000); // 1491536422147300
- 1. Ottenere timestamp corrente con millisecondi
- 2. Come ottenere l'ora corrente in millisecondi da C in Linux?
- 3. Come ottenere il tempo corrente in millisecondi in C Programming
- 4. Come ottenere l'ora corrente in millisecondi in Android
- 5. Ottieni l'ora corrente, in millisecondi, in C?
- 6. Come ottenere il tempo in millisecondi dall'epoca unix in Javascript?
- 7. come ottenere data da millisecondi in Android
- 8. Timestamp corrente SQLite con millisecondi?
- 9. Ottieni la data corrente (con 0: 00: 000) in millisecondi?
- 10. Come ottenere il primo giorno del mese corrente in PHP?
- 11. Come ottenere l'URL della pagina corrente in PHP
- 12. PHP: come ottenere l'ora corrente in ora: minuto: secondo?
- 13. C'è qualche modo in XQuery per ottenere l'ora corrente in millisecondi da qualche Epoch?
- 14. Come formattare una quantità di millisecondi in minuti: secondi: millisecondi in PHP?
- 15. Come ottenere un valore DateDiff in millisecondi in VBA (Excel)?
- 16. Come ottenere il tempo in millisecondi in Android Shell?
- 17. Come ottenere 'millisecondi' come parte del tempo in perl?
- 18. Tentativo di aggiungere 3 giorni in millisecondi alla data corrente
- 19. Ottenere il giorno per il giorno corrente in PHP
- 20. Visualizza millisecondi in Excel
- 21. Memorizzazione dell'ora corrente senza componente millisecondi
- 22. SQLite: Inserire timestamp corrente con precisione millisecondi
- 23. Come cronometrare un'operazione in millisecondi in Ruby?
- 24. Localizzare tempo corrente in PHP
- 25. Come ottenere minuti, secondi e millisecondi da datetime.now() in python?
- 26. Come ottenere la differenza tra due QDateTimes in millisecondi?
- 27. Come ottenere la differenza di orario in millisecondi
- 28. Come convertire HH: mm: ss.SSS in millisecondi?
- 29. Come ottenere il percorso corrente in HtmlHelper?
- 30. come ottenere la posizione corrente in FragmentPagerAdapter?
La fortuna conta su così anche – prograshid
Come è spesso il caso, penso che la maggior parte dei upvotes sarà ** perché ** lo ha chiesto - piuttosto che *** come *** ha chiesto. –