2013-12-13 4 views
17

übergebenes Datum nicht formatieren Ich kann DateTime() leider nicht verwenden, da der Server, auf dem dieses Projekt läuft, PHP v.5.2 ausführt.

die Linie in Frage:

$aptnDate2 = date('Y-m-d', $_POST['nextAppointmentDate']); 

den folgenden Fehler führt:

Notice: A non well formed numeric value encountered 

so formatiert ich var Dump, um sicherzustellen, es ist gut ..

var_dump($_POST['nextAppointmentDate']); 

string(10) "12-16-2013" 

Die php docs state, dass es braucht einen Zeitstempel und keine Zeichenfolge. aber wenn ich tun:

date('Y-m-d', strtotime($_POST['nextAppointmentDate'])); 

und dann var_dump das Ergebnis, ich diese:

string(10) "1969-12-31" 

warum kann ich nicht formatiert ein Datum mit diesem Datum Wert und strtotime()?

danke!

Antwort

43

Aus der Dokumentation für strtotime():

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

In Ihrem Datum Zeichenfolge, haben Sie 12-16-2013. 16 ist kein gültiger Monat und daher strtotime() gibt false zurück.

Da kann man nicht Datetime-Klasse verwenden, können Sie manuell ersetzen die - mit /str_replace() mit dem Datum in ein Format zu konvertieren, dass strtotime() versteht:

$date = '2-16-2013'; 
echo date('Y-m-d', strtotime(str_replace('-','/', $date))); // => 2013-02-16 
+0

Prost Kumpel, das war es. Ich hätte schwören können, dass Bindestriche akzeptabel sind, vielleicht ist das nur bei 'DateTime()'? Danke für Ihre Hilfe. :) – Prefix

+0

@Prefix: Wenn Sie eine falsch formatierte Datumszeichenfolge an 'DateTime' übergeben, wird (normalerweise) eine Ausnahme ausgelöst. Eine Liste der akzeptierten Datumsformate finden Sie in der Dokumentation (http://www.php.net/manual/en/datetime.formats.date.php). Wenn Sie DateTime verwenden, ist ** 'DateTime :: createFromFormat()' ** der richtige Weg: https://eval.in/79189 –

-4

Zweites Argument in der Funktion date() ist der Unix-Zeitstempel, nicht die Datumszeichenfolge. Verwenden Sie explode(), um Ihre Datumszeichenfolge zu teilen und sie erneut zu kombinieren. strtotime erwartet kein Datum in einem solchen Format.

Verwandte Themen