2015-07-04 5 views
9

voglio ottenere timestamp corrente con millisecondi in PHP qualcosa come di seguito, in JavaScript io uso Date.now()Ottenere timestamp corrente con millisecondi

1436030635348 

ho provato qualcosa di simile di seguito:

$time = str_replace(".","",microtime(true)); 

ma a volte non funziona correttamente Come se stampasse una o due cifre in meno.

+1

avete bisogno il timestamp in millisecondi o in microsecondi? il titolo dice una cosa e la domanda reale un altro –

+0

è un problema di arrotondamento. Gli zeri finali non vengono echeggiati, 'str_pad (str_replace (". "," ", Microtime (true)), 14, 0)' – splash58

+0

@AlexAndrei: scusa ho bisogno in milli secondi – Vishnu

risposta

9

Può stampare meno cifre, perché è un valore float. Quindi se ottieni 1234.0005, che `.0005 in realtà significa 500 microsecondi. Gli zeri dopo il 5 sono persi perché è ancora un valore float non formattato.

La funzione microtime si basa sulla chiamata di sistema gettimeofday(), che non è precisa al microsecondo. Comunemente è accurato fino a 10 microsecondi. Vedi anche Linux - Is gettimeofday() guaranteed to be of microsecond resolution.

-edit- Vedo che le specifiche sono passate da microsecondi a millisecondi.

Per ottenere il valore float come numero intero, è possibile moltiplicare per un valore. Il valore float rappresenta i secondi. Moltiplicare per 1000 per ottenere millisecondi o 1.000.000 per ottenere microsecondi. Dato che le specifiche (ora) dicono millisecondi, dovresti moltiplicare per 1000. 10k ti darà una precisione di 1/10ms = 100μs. Un millisecondo è un millesimo di secondo. Un microsecondo è un milionesimo di secondo.

Per farla breve, per ottenere il tempo in millisecondi interi, utilizzare questo:

$milliseconds = round(microtime(true) * 1000); 

Nota: c'è un motivo per cui si ottiene il tempo come una stringa o di un galleggiante per impostazione predefinita. Il motivo è che su sistemi a 32 bit, il numero intero di PHP è anch'esso di 32 bit e non è abbastanza grande da contenere il timestamp inclusi millisecondi e microsecondi. Quindi questa soluzione funzionerà bene solo su un sistema a 64 bit.

+0

quindi come posso conservare zero .. e qualsiasi altra funzione per ottenere il timestamp senza decimale? – Vishnu

+0

Invece di sostituire il '.' puoi moltiplicare per un milione. – GolezTrol

+0

lol million o 10k? 10k sembra funzionare – Vishnu

0

Penso solo bisogno di utilizzare questa funzione per ottenere un timestamp con micro secondi in PHP:

int microtime (void) 

usarlo come mostrato nel seguente link, seguito frammento di codice mostra come avevo alterato secondo di essere utile alla tua domanda:

<?php 

function microtime_microseconds() 
{ 
    list($usec, $sec) = explode(" ", microtime()); 
    return round(($usec * 1000) + $sec); 
} 

$micro_time = microtime_microseconds(); 

echo $micro_time; 

?> 

e anche per quanto riguarda riferimento a tale funzione microtime() PHP, si prega di visitare il sito e leggere questo PHP manual page.

+1

Correggere, dare un'occhiata alla funzione [microtime] di php (http://php.net/manual/en/function.microtime.php) – Ali

+1

@ Ali grazie Ali, ho aggiornato la risposta in base al tuo suggerimento. –

+0

È la stessa funzione utilizzata da OP. 'microtime' restituisce un float o una stringa. Non c'è int. L'esempio di w3schools che hai collegato usa la versione stringa per restituire un float. Questa è la sostituzione delle vecchie versioni di PHP che non supportava 'get_as_float = true' come parametro di' microtime'. Quindi, questa risposta non risolve il problema dell'OP in alcun modo. – GolezTrol

1
$timeStampData = microtime(); 
list($msec, $sec) = explode(' ', $timeStampData); 
$msec = round($msec * 1000); 

$result = $sec . $msec; 

Qualcosa di simile

Ma nota, che js date.now) tempo di ritorno (in millisecondi, non microsecondi

+0

quindi come ottenere il timestamp in millisecondi in php? – Vishnu

+0

sì ho bisogno in milli secondi – Vishnu

+0

esempio sopra mostra come ottenerlo. se vuoi ottenere il timestamp con microsecondi - dovresti cambiare questo round ($ msec * 1000) per arrotondare ($ msec * 1000000) –