2017-03-18 5 views
0

Ich möchte ein Y-m-d formatiertes Datum von einer Zeichenfolge wie "28. Januar 1959" erhalten.PHP Datumsformat und strtotime

Ich versuchte date("Y-m-d", strtotime($dateString)), aber es gibt 1970-01-01 zurück.

Die komische Sache ist, dass, wenn ich den obigen Code mit "28. Januar 1959" Konstante debuggen, es funktioniert, aber wenn ich die Zeichenfolge durch die Variable ersetzen, die den gleichen Wert speichert, gibt 1970-01-01 zurück.

Irgendeine Idee?

+0

Ihr Code gut !! arbeitet. –

+0

wo bekommst du dein string date? –

+0

von einer externen Web-API (http://www.myapifilms.com) –

Antwort

0

Die Lösung ist Sonderzeichen aus dem Datumszeichenfolge entfernen:

date("Y-m-d", strtotime(preg_replace('/[^A-Za-z0-9\-]/', '', $dateString))) 
0

Es scheint der Grund, warum dies geschieht, weil Ihr System negative Zeitstempel nicht verarbeiten kann. Der Unix-Zeitstempel, der von strtotime erstellt wird, hat 1970-01-01 00:00:00 als Nullpunkt. Jedes Datum davor ist eine negative Zahl, jedes Datum danach ist eine positive Zahl. Ich denke aus irgendeinem Grund kann Ihr System eine negative Zahl für einen Zeitstempel nicht interpretieren.

Ich bin mir nicht sicher, ob es hilft, aber die PHP-Website hat a few remarks on this issue.

Ich bin gespannt, was dies ausgeben würde: date('Y-m-d', -1), die 1969-12-31 sein sollte.

+0

Datum ('Y-m-d', -1) Ausgabe 1969-12-31 –

+0

Und 'strtotime ('28 Januar 1959 ')' Ausgaben' -344822400 '? – Asperitas

+0

ja, es gibt diese –