Format PHP date () podczas wstawiania do datetime w MySQL

Jaki jest prawidłowy format do przekazania funkcji date() w PHP, jeśli chcę wstawić wynik do kolumny typu MySQL datetime?

Próbowałem date("Y-M-D G:i:s") ale to tylko wstawia "0000-00-00 00: 00: 00" za każdym razem.

 249
Author: Mifeet, 2010-02-07

10 answers

Problem polega na tym, że używasz 'M' i 'D', które są reprezentacją tekstową, MySQL oczekuje numerycznej reprezentacji formatu 2010-02-06 19:30:13

Spróbuj: date("Y-m-d H:i:s"), który używa odpowiedników liczbowych.

Edit: switched G to H, chociaż może to nie mieć wpływu, prawdopodobnie chcesz użyć formatu 24-godzinnego z wiodącymi 0s.

 551
Author: Mark Elliot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-07 00:29:56

Z komentarzy php date() strona podręcznika :

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

Miałeś poprawne " Y "- to pełny rok, ale " M "to trzy znakowy miesiąc, podczas gdy" m " to dwucyfrowy miesiąc. Ten sam problem z " D "zamiast " d". "G" jest 1 lub 2-cyfrową godziną, gdzie " H " zawsze ma wiodące 0 w razie potrzeby.

 96
Author: Tim Lytle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-07 00:29:59

Oto alternatywne rozwiązanie: jeśli masz datę w PHP jako znacznik czasu, obejdź obsługę jej za pomocą PHP i pozwól DB zająć się jej transformacją za pomocą funkcji FROM_UNIXTIME.

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 |
+---------------------+
 36
Author: JAL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-07 00:56:46

Używam poniższego kodu PHP, aby utworzyć zmienną, którą wstawiam do kolumny DateTime MySQL.

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

Utrzyma aktualną datę i godzinę serwera.

 21
Author: Steffan Clent Davies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-25 11:00:28
$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
Author: Ali Umair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-03 11:31:49

Formatowanie znacznika czasu do kolumny DateTime MySQL:

strftime('%Y-%m-%d %H:%M:%S',$timestamp);
 8
Author: Ahmed Saber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-31 11:09:41

Formatowanie DateTime MySQL z PHP

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
 7
Author: dev4092,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 16:54:14

Używam tej funkcji (PHP 7)

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

Starsze wersje PHP (PHP

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}
 7
Author: SandroMarques,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-15 22:27:48

Nie ma potrzeby używania metody date () z PHP, jeśli nie używasz znacznika czasu. Jeśli dateposted jest kolumną datetime, możesz wstawić bieżącą datę w następujący sposób:

$db->query("INSERT INTO table (dateposted) VALUES (now())");
 6
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-03 22:09:48

To doprowadza mnie do szału szukając prostej odpowiedzi. W końcu zrobiłem tę funkcję, która wydaje się przechwytywać wszystkie dane wejściowe i dawać dobry ciąg SQL, który jest poprawny lub przynajmniej poprawny i możliwy do sprawdzenia. Jeśli jest 1999-12-31 to prawdopodobnie jest źle, ale nie rzuci złego błędu w MySQL.

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));
    }
}
 0
Author: Brian Jones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 22:12:29