2016-10-19 4 views
-1

Ich habe Daten, die im folgenden Format sind 2016-10-16T22: 12: 45.104Z die Daten werden dann in ein Datetime-Objekt von einem API-SDK, das ich verwende, konvertiert.php datetime in Mikrosekunden

Was ich versuche zu tun, ist das Datetime-Objekt als eine Zeichenfolge genau wie '2016-10-16T22: 12: 45.104Z' es muss genau sein und eine Zeichenfolge, damit ich es an eine andere Funktion übergeben kann.

Ich fand das folgende PHP-Skript auf eine andere Antwort hier aber dies ist für die aktuelle Zeit.

Ich habe Dinge wie -> Format ('U') versucht, aber nichts funktioniert, muss ich das Datetime-Objekt im gleichen Format wie Mikrozeit (wahr) denke ich.

Wie kann ich den folgenden PHP-Code an den Daten verwenden, die ich habe, damit sie genau wie "2016-10-16T22: 12: 45.104Z" ausgegeben werden können?

<?php 
$time = microtime(true); 
$tMicro = sprintf("%03d",($time - floor($time)) * 1000); 
$tUtc = gmdate('Y-m-d\TH:i:s.', $time).$tMicro.'Z'; 
echo $tUtc; 
?> 
+0

-> Format (Datetime :: ISO8601)/-> Format ('Y-m-d \ TH: i: s \ Z'); sollte funktionieren – Gogol

+1

RTFM: [gmdate] (http://php.net/gmdate): 'Identisch mit der Funktion date() und daher RTFM: [Datum] (http://php.net/manual/en/ function.date.php) - ''u' - Mikrosekunden (hinzugefügt in PHP 5.2.2). Beachten Sie, dass date() immer 000000 generiert, da ein Integer-Parameter verwendet wird, während DateTime :: format() Mikrosekunden unterstützt, wenn DateTime mit Mikrosekunden erstellt wurde. –

+0

Warum nicht einfach das ursprüngliche Datum speichern und verwenden, da es bereits vorhanden ist das richtige Format? –

Antwort

0

Wie Sie in den Dokumenten gefunden haben, ist 'u' in diesem Fall sehr hilfreich. http://php.net/manual/en/class.datetime.php#118608

Sie sollten in der Lage sein, diese Lösung "Y-m-d \ TH: i: s.u \ Z" zu verwenden, aber unglücklicherweise möchten Sie Millisekunden statt Mikrosekunden und Sie am Ende mit 3 zusätzlichen 0s. Um dies zu beheben, teilen nur das Ergebnis der 'U' von 1000.

$dt = new DateTime('2016-10-16T22:12:45.104Z'); 
$helper = $dt->format('u'); //this is factor of 1000 off 
$helper /= 1000 
$ans = $dt->format('Y-m-d\TH:i:s'); //get the first part of what you 
$ans .= "." . $helper . "Z"; //add the milliseconds back on, and Z for good measure 

echo $ans . "\n"; 
+0

Das funktioniert perfekt, vielen Dank für die ausführliche Erklärung. – tttwb