Формат PHP date () при вставке в datetime в MySQL

каков правильный формат для передачи в date() функция в PHP, если я хочу вставить результат в MySQL datetime тип столбца?

Я пробовал date("Y-M-D G:i:s") но это просто вставляет "0000-00-00 00:00:00" каждый раз.

10 ответов


проблема в том, что вы используете 'M' и 'D', которые являются текстовыми представлениями, MySQL ожидает числовое представление формата 2010-02-06 19:30:13

попробуй: date("Y-m-d H:i:s") который использует числовые эквиваленты.

edit: switched G до H, хотя это может не иметь влияния, вы, вероятно, хотите использовать 24-часовой формат с ведущими 0s.


из комментариев php date() страница руководства:

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

у Вас было " Y "правильно - это полный год, но" M "- это месяц из трех символов, а " m " - двухзначный месяц. Та же проблема с " D "вместо " d". "G" - это 1 или 2-значный час, где " H " всегда имеет ведущее 0, когда это необходимо.


вот альтернативное решение: если у вас есть дата в PHP в качестве метки времени, обход обработки его с помощью PHP и пусть БД позаботится о его преобразовании с помощью


Я использую следующий PHP-код для создания переменной, которую я вставляю в столбец DATETIME MySQL.

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

Это будет содержать текущую дату и время сервера.


$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`

штамп времени формата к столбцу DATETIME MySQL:

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

формат MySQL datetime с PHP

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

Я использую эту функцию (PHP 7)

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

старые версии PHP (PHP

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

нет необходимости использовать метод date () из PHP, если вы не используете метку времени. Если dateposted является столбцом datetime, вы можете вставить текущую дату следующим образом:

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

это сводило меня с ума, ища простой ответ. Наконец, я сделал эту функцию, которая, кажется, улавливает все входные данные и дает хорошую строку SQL, которая правильна или, по крайней мере, действительна и проверяема. Если это 1999-12-31, это, вероятно, неправильно, но не будет бросать плохую ошибку в 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));
    }
}