PHP date () - Rückgabe im format JJJJ-mm-ddThh:mm:ss.uZ
Ich habe folgende Frage/Antworten:
Wie bekomme ich das format “yyyy-MM-ddTHH:mm:ss.fffZ" in php?
Die Antworten enthalten links zu Microsoft-Dokumenten, formatieren von Daten, aber diese funktionieren nicht in PHP.
Den oben Antwort empfehlen
date('Y-m-dTH:i:s.uZ') //for the current time
Diese Ausgänge
2013-03-22EDT12:56:35.000000-1440016
Hintergrund
Arbeite ich mit einer API welche nur ein timestamp in dem oben genannten format. Die API ist in Großbritannien (GMT) und mein server ist in Australien (AEST).
Das Beispiel in der API-Dokumentation Fragen Sie nach dem Datum in diesem format:
2011-07-15T16:10:45.555Z
Der nächste, den ich bekommen kann, dieses ist date('c'), welche Ausgänge:
2014-07-03T16:41:59+10:00//Notice the Z is replaced with a time diff in hours
Ich glaube das " Z " bezieht sich auf eine Zone, aber es wird nicht erwähnt in der PHP-Dokumentation.
Leider, wenn ich diese post-format, die API liest die Zeit nehmen und 10 Stunden aus. Ich bekomme eine Fehlermeldung, dass das Datum nicht in der Vergangenheit (wie ist die Prüfung gegen die lokale Zeit in Melbourne, aber das sehen einer Zeit von 10 Stunden früher).
Ich habe versucht, trimmen die Zeitstempel zu entfernen, das +1000, die die API akzeptiert, aber die Aufzeichnung zeigt, wie geschaffen als 10 Stunden früher.
Muss ich passen die Zeitstempel erforderlich, aber ich finde keine Möglichkeit zum replizieren der vorherigen Ausgabe, die in PHP für Melbourne, Australien. Jede Hilfe wird sehr geschätzt.
Erste Frage, die auf SO SO lassen Sie mich bitte wissen, wie ich gegangen
- Haben Sie versucht
date(DATE_ATOM);
? - Hallo Alex - die Ausgabe ist die gleiche wie Date('c'); Getestet nur jetzt und kam
2014-07-07T17:54:05+10:00
- Wenn eine Lösung nicht gepostet, vielleicht, wenn Sie wissen, die API wird immer trim 10 Stunden, ein Kompromiss wäre, fügen Sie eine zusätzliche 10 Stunden, um die Zeit, die Sie senden? In Wirkung, verfolgen Sie zwei mal die 'echte' Zeit, und die, erfüllt die API.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Z
steht für die ZeitzoneUTC
und ist in ISO-8601, die Ihre gewünschte Ausgabe-format, erweitert durch den Millisekunde Teil.Vor der Ausgabe der Zeit, die Sie brauchen, um zu übertragen, die lokalen Zeiten in UTC:
dann können Sie die folgenden format-string:
Beachten Sie, dass ich unwiderruflich den Millisekunde Teil und entging der Sonderzeichen
T
undZ
im format Muster.2014-07-07T08:01:32+00:00
- ich bin glücklich genug, dass die Zeitzone eingestellt ist, um korrekt zu sein, für Australien/Melbourne. Es ist mehr die Ausgabe, einschließlich der Millisekunden, plus das Z-Zeichen. Ich beginne zu denken, das ist nicht eine PHP-Funktion und die API anfordert, etwas, das nicht zugestellt werden kann+00:00
oderZ
Z
dies bedeutet, es erwartet die Daten in UTC, nicht in Melbournes Zeitzone. Mit dieser sollte es ein leichtes sein den erwarteten Ausgang .. Sekunde ...setTimeZone()
wie ich vorgeschlagen habe?$dt new DateTime()
. 2.$dt->format(DateTime::ISO8601)
. Diese Ausgänge2014-07-08T09:18:01+1000
- beachten Sie die fehlende Doppelpunkt in der Stunde-offset von UTC.date('c')
enthält den Doppelpunkt. Dies ist nicht die Antwort auf meine ursprüngliche Frage, aber es hat fix mein problem.data('c')
im code?