it-swarm.com.de

PHP date () -Format beim Einfügen in datetime in MySQL

Was ist das richtige Format für die Übergabe an die Funktion date() in PHP, wenn ich das Ergebnis in eine Spalte vom Typ MySQL datetime einfügen möchte?

Ich habe versucht, date("Y-M-D G:i:s"), aber das fügt immer nur "0000-00-00 00:00:00" ein.

288
Alex

Das Problem ist, dass Sie 'M' und 'D' verwenden. Dies sind Textdarstellungen. MySQL erwartet eine numerische Darstellung des Formats 2010-02-06 19:30:13.

Versuchen Sie: date("Y-m-d H:i:s"), wobei die numerischen Äquivalente verwendet werden.

edit: G auf H umgestellt, obwohl dies möglicherweise keine Auswirkungen hat, möchten Sie wahrscheinlich das 24-Stunden-Format mit führenden Nullen verwenden.

627
Mark Elliot

Aus den Kommentaren von PHP's date() Manualpage :

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>

Sie hatten das richtige 'Y' - das ist ein volles Jahr, aber 'M' ist ein dreistelliger Monat, während 'm' ein zweistelliger Monat ist. Gleiches Problem mit 'D' anstelle von 'd'. 'G' ist eine ein- oder zweistellige Stunde, wobei 'H' bei Bedarf immer eine führende 0 hat.

101
Tim Lytle

Hier ist eine alternative Lösung: Wenn Sie das Datum in PHP als Zeitstempel haben, umgehen Sie es mit PHP und lassen Sie die DB es mithilfe des FROM_UNIXTIME umwandeln. Funktion.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
40
JAL

Ich verwende den folgenden PHP Code, um eine Variable zu erstellen, die ich in eine MySQL DATETIME-Spalte einfüge.

$datetime = date_create()->format('Y-m-d H:i:s');

Hier werden das aktuelle Datum und die aktuelle Uhrzeit des Servers gespeichert.

24
$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`
10
Ali Umair

Formatieren Sie den Zeitstempel in die Spalte MySQL DATETIME:

strftime('%Y-%m-%d %H:%M:%S',$timestamp);
9
Ahmed Saber

Ich benutze diese Funktion (PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

Ältere Versionen von PHP (PHP <7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}
8
SandroMarques

Formatieren Sie MySQL datetime mit PHP

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
8
dev4092

Die Methode date () von PHP muss nicht verwendet werden, wenn Sie keinen Zeitstempel verwenden. Wenn dateposted eine datetime-Spalte ist, können Sie das aktuelle Datum folgendermaßen einfügen:

$db->query("INSERT INTO table (dateposted) VALUES (now())");
6
Adam

Das hat mich verrückt gemacht und nach einer einfachen Antwort gesucht. Schließlich machte ich diese Funktion, die alle Eingaben zu fangen scheint und eine gute SQL-Zeichenfolge gibt, die korrekt oder zumindest gültig und überprüfbar ist. Wenn es am 31.12.1999 ist, ist es wahrscheinlich falsch, aber es wird keinen schlechten Fehler in MySQL auslösen.

function MakeSQLDate($date) {
    if (is_null($date)) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    }

    if (($t = strtotime($date)) === false) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    } else {
        return date('Y-m-d H:i:s', strtotime($date));
    }
}
1
Brian Jones

Verwendung der Klasse DateTime in PHP7 +:

function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
    $dt = new DateTime();
    $dt->setTimezone(new DateTimeZone('UTC'));
    $dt->setDate($year, $month, $day);
    $dt->setTime(0, 0, 0, 0); // set tine to midnight

    return $dt->format("Y-m-d H:i:s");
}
1
Nino Škopac

Ein kleiner Nachtrag zur akzeptierten Antwort: Wenn die Datenbank datetime als UTC gespeichert ist (was ich immer mache), sollten Sie gmdate("Y-m-d H:i:s") anstelle von date("Y-m-d H:i:s") verwenden.

Oder, wenn Sie es vorziehen, dass MySQL alles erledigt, wie einige Antworten nahelegen, würde ich MySQLs UTC_TIMESTAMP mit dem gleichen Ergebnis einfügen.

Hinweis: Ich habe die Frage bezüglich der aktuellen Uhrzeit verstanden.

0
Bruno

Dies ist eine genauere Methode. Es setzt Dezimalstellen hinter die Sekunden, um die Genauigkeit zu erhöhen.

$now = date('Y-m-d\TH:i:s.uP', time());

Beachten Sie den .uP.

Weitere Informationen: https://stackoverflow.com/a/6153162/8662476