2015-07-04 11 views
9

Ich mag aktuelle Zeitstempel bekommen mit Millisekunden in PHP so etwas wie unten in JavaScript verwende ich Date.now()mit Millisekunden aktuelle Zeitstempel Get

1436030635348 

Ich habe versucht, so etwas wie unten:

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

Aber irgendwann es arbeitet nicht richtig. Wie es druckt ein oder zwei Ziffern weniger.

+1

beurteilen Sie die Zeitstempel in Millisekunden oder in Mikrosekunden benötigen? Der Titel sagt eine Sache und die eigentliche Frage –

+0

ist es Rundungsproblem. Nachfolgende Nullen werden nicht gechattet, 'str_pad (str_replace (". "," ", Microtime (true)), 14, 0)' – splash58

+0

@AlexAndrei: Entschuldigung, ich brauche in Millisekunden – Vishnu

Antwort

9

Es kann weniger Ziffern drucken, da es sich um einen Gleitkommawert handelt. Also, wenn Sie 1234.0005 bekommen, bedeutet das `.0005 tatsächlich 500 Mikrosekunden. Die Nullen nach den 5 sind verloren, weil es immer noch ein unformatierter Float-Wert ist. Die Funktion microtime basiert auf dem Systemaufruf gettimeofday(), der ebenfalls nicht auf die Mikrosekunde genau ist. Üblicherweise ist es auf 10 Mikrosekunden genau. Siehe auch Linux - Is gettimeofday() guaranteed to be of microsecond resolution.

-edit- Ich sehe die Spezifikationen haben sich von Mikrosekunden zu Millisekunden geändert.

Um den Gleitkommawert als Ganzzahl zu erhalten, können Sie mit einem Wert multiplizieren. Der Gleitkommawert repräsentiert Sekunden. Multiplizieren Sie mit 1000, um Millisekunden oder 1.000.000 zu erhalten, um Mikrosekunden zu erhalten. Da die Spezifikationen (jetzt) ​​Millisekunden angeben, sollten Sie mit 1000 multiplizieren. 10k gibt Ihnen eine Genauigkeit von 1/10ms = 100μs. Eine Millisekunde ist ein Tausendstel einer Sekunde. Eine Mikrosekunde ist ein Millionstel Sekunden.

Lange Rede kurzer Sinn, die Zeit in ganzzahligen Millisekunden zu erhalten, verwenden Sie diese:

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

Hinweis: es gibt einen Grund, warum Sie die Zeit als String oder einem Schwimmer standardmäßig erhalten. Der Grund dafür ist, dass die Ganzzahl von PHP bei 32-Bit-Systemen ebenfalls 32 Bit groß ist und nicht groß genug ist, um den Zeitstempel einschließlich Millisekunden und Mikrosekunden zu enthalten. Diese Lösung wird also nur auf einem 64-Bit-System funktionieren.

+0

so wie kann ich erhalten Null .. und jede andere Funktion zu erhalten Zeitstempel ohne Dezimaltrennzeichen? – Vishnu

+0

Statt das '.' zu ersetzen, können Sie mit einer Million multiplizieren. – GolezTrol

+0

lol Million oder 10k? 10k scheint zu arbeiten – Vishnu

0

Ich glaube, Sie müssen nur diese Funktion verwenden, um einen Zeitstempel mit Mikrosekunden in PHP zu erhalten:

int microtime (void) 

es verwenden, wie in den folgenden link gezeigt, folgenden Code-Schnipsel zeigen Ihnen, wie es es geändert hatte nach Ihrer Frage hilfreich sein:

<?php 

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

$micro_time = microtime_microseconds(); 

echo $micro_time; 

?> 

und auch als Referenz in Bezug auf diese microtime() PHP-Funktion, besuchen Sie bitte und diese PHP manual page lesen.

+1

Korrigieren Sie, werfen Sie einen Blick auf php's [microtime Funktion] (http://php.net/manual/en/function.microtime.php) – Ali

+1

@Ali danke Ali, aktualisierte ich die Antwort nach Ihrem Vorschlag. –

+0

Das ist die gleiche Funktion, die OP benutzt. 'microtime' gibt entweder einen float oder eine string zurück. Es gibt keine int. Das Beispiel von w3schools, mit dem Sie verknüpft haben, verwendet die String-Version, um einen Gleitkommawert zurückzugeben. Dies ist der Ersatz für alte PHP-Versionen, die 'get_as_float = true' nicht als Parameter für' microtime' unterstützten. Also, diese Antwort löst das Problem von OP in keiner Weise. – GolezTrol

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

$result = $sec . $msec; 

So etwas

Aber beachten Sie, dass js date.now() Rücklaufzeit in Millisekunden, nicht Mikrosekunden

+0

also, wie man Zeitstempel in Millisekunden in PHP bekommt? – Vishnu

+0

ja ich brauche in Millisekunden – Vishnu

+0

Beispiel oben zeigen, wie man es bekommt. Wenn du willst, dass du einen Zeitstempel mit Mikrosekunden bekommst - solltest du diese Runde ($ msec * 1000) in Runde ($ msec * 1000000) ändern –

Verwandte Themen