2016-03-20 9 views
3

Ich bin auf diese verweisen: Converting ISO 8601 format to d M Y in PHPtatsächliche Zeit mit iso Anzeige 8601

habe ich versucht, das gleiche wie folgt aus: echo date("d M Y H:i:s", strtotime($time));

Aber die Zeit ist nicht wie in der Datenbank gespeichert gezeigt. Es zeigt einige Stunden Unterschied.

Database: 2016-03-20T23: 30: 51 + 00: 00

Mit echo über php i erhalten: 21. März 2016 00.30.51 Wo, wie es 20. März 2016 sein 23: 30:51

Das obige Beispiel zeigt zusätzliche 1 Stunde y? Ich habe versucht, mit diesem Format Stunden & Minute angezeigt, aber die Zeit ist falsch angezeigt. Die Zeitanzeige hat einige Stunden Unterschied. Warum ist das so?

+0

können Sie die ursprüngliche Zeichenfolge aus der Datenbank anzeigen? – fusion3k

+0

Es sieht so aus, als würden strtotime und date verschiedene Zeitzonen benutzen. Können wir ein Beispiel für den Inhalt der Variablen $ time sehen? –

+0

Details in der Frage aktualisiert. Ja, Zeitzonen sind anders. –

Antwort

1

Ihr Datumsformat 2016-03-20T23:30:51+00:00 zeigt eine GMT DateTime (Randnotiz: dieselbe TimeZone, die von php/unix Timestamps verwendet wird). So

, wenn Sie schreiben:

echo date("d M Y H:i:s", strtotime($time)); 

Sie erhalten noch die in Ihrem System Time-Zone umgewandelt korrekte Datum.

können Sie DateTime Klasse verwenden, um mehr Operationen mit Daten durchführen:

$date = new DateTime($time); 
echo $date->format("d M Y H:i:s"); 

wird das Datum im Original (GMT) Format drucken.

$date->setTimezone(new DateTimeZone('Europe/Berlin')); 
echo $date->format("d M Y H:i:s"); 

wird das Datum in 'Europa/Berlin' Zeitzone drucken.


Seitliche Anmerkung: Speichern von Daten in ISO 8601 UTC/GTM ist eigentlich die beste Wahl.


+0

Die Zeitzone im lokalen Server ist: UTC + 05: 30 (Indien) Datenbankwert ist (GMT-3) (Chile) Wenn der Wert von Chile in DB ist 2016-03-20T23: 30: 51 + 00: 00' dann in Indien wäre es um '2016-03-21T05: 00: 51' was noch nicht ordentlich zurück geht! –

+0

'+00: 00' bedeutet UTC/GMT Basierend auf meinem obigen Beispiel, erstellen Sie' $ date = new DateTime ($ time); 'und dann' echo $ date-> getTimezone-> getName(); 'um es zu sehen. Das Datum ist UTC/GMT Format 100% Siehe [hier] (https://en.wikipedia.org/wiki/ISO_8601) – fusion3k

+0

Meine Daten sind auf '$ row_MultipleLOPStatus [" TimeUpdated "]' können Sie mir mit vollem Code helfen es. @ fusion3k sorry ja zeit gespeichert wurde gmt. - dublin time –