Frage

Ich bin verwirrt darüber, warum dieses Stück Code kein Datum im britischen Format 00/000000 in das MySQL-Datum des Datums 0000-00-00 umwandelt. Was ich in der DB bekomme, ist 1970-01-01. Es ist im Datumsformat nicht datetime, also sollte es funktionieren? Vielen Dank

$destroy = mysql_real_escape_string($_POST['destroy']);
$desttempdate=str_replace("-", "/", $destroy); 
$destdate = date('Y-m-d', strtotime($desttempdate));
War es hilfreich?

Lösung

Hier sind einige Optionen für Sie, um es zum Laufen zu bringen:

So etwas für PHP4:

function date2timestamp($date,$seperator='/'){
    if($date!=''){
        $dateEx = explode($seperator,$date);
        $date = (strlen($dateEx[2])==2?'20'.$dateEx[2]:$dateEx[2]).'-'.$dateEx[1].'-'.$dateEx[0].' 00:00:00';
    }
    return $date;
}

Für PHP5.3 Verwendung CreateFromFormat ():

$date = DateTime::createFromFormat('j/M/Y', $UK_date);
echo $date->format('Y-m-d');

Auch weitere Optionen für createfromFormat () in Php5.2 umfassen:

Andere Tipps

strtotime() Funktion gibt Unix Timestamp zurück und 0000-00-00 Datum passt nicht in das - Sie werden einfach bekommen 0 (Null) Stattdessen, was richtig konvertiert wird, um 1970-01-01.

Sie können tun, was Sie wollen, indem Sie so etwas tun:

$destdate = mysql_real_escape_string($_POST['destroy']); // assuming YYYY/MM/DD
$destdate = str_replace('/', '-', $destdate);
if ($destdate != '0000-00-00'){
    $destdate = date('Y-m-d', strtotime($desttempdate));
}

Das Problem ist, dass Sie angehen strtotime Was es denkt, ist ein ungültiges Datum. Die Dokumentation sagt:

Notiz:

Die Daten in den m/d/y- oder dmy -Formaten werden durch Betrachtung des Trennscheiders zwischen den verschiedenen Komponenten disambiguiert: Wenn das Separator ein Schrägstrich (/) ist, wird der amerikanische m/d/y angenommen; Wenn das Trennzeichen ein Armaturenbrett (-) oder ein Punkt (.) ist, wird das europäische DMY-Format angenommen.

Um potenzielle Unklarheiten zu vermeiden, ist es am besten, ISO 8601 (YYYY-MM-DD) -Daten oder DateTime :: CreateFromFormat () zu verwenden, wenn möglich.

Also, was hier passiert / Trennzeichen, was das bedeutet strtotime versucht es zu analysieren als m/d/y Anstatt von d/m/y. Entweder ersetzen Sie den Ersatz überhaupt nicht, wenn sich Ihr Datum im europäischen Format befindet, oder noch besser verwenden DateTime::createFromFormat() Wie die Dokumente vorschlagen.

Sie können überprüfen, ob dies tatsächlich das Problem ist, indem Sie den Rückgabewert von überprüfen strtotime:

$destroy = mysql_real_escape_string($_POST['destroy']);
$desttempdate=str_replace("-", "/", $destroy);
var_dump(strtotime($desttempdate));

Dies gibt "bool (false)" aus und bestätigt dies strtotime kann seine Eingabe nicht analysieren.

Lösung:

Wie oben erwähnt, bevorzugen DateTime::createFromFormat():

$date = DateTime::createFromFormat('d/m/Y', $_POST['destroy']);
$destdate = $date->format('Y-m-d');

Andernfalls wäre der einfachste Weg, das Problem zu beheben, auch wenn ich diesen Ansatz nicht empfehle, einfach darin bestehen, die zu überspringen str_replace:

$destdate = date('Y-m-d', strtotime($_POST['destroy']));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top