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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Здесь альтернативное решение: если у вас есть дата в PHP как временная метка, обходите ее обработку с помощью PHP и позвольте БД позаботиться о ее преобразовании с помощью функции 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 |
+---------------------+

Ответ 4

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

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

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

Ответ 5

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

Ответ 6

Отметьте метку времени для столбца MySQL DATETIME:

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

Ответ 7

Формат MySQL datetime с PHP

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

Ответ 8

Я использую эту функцию (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 & lt; 7)

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

Ответ 9

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

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

Ответ 10

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

Ответ 11

Использование класса DateTime в 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");
}

Ответ 12

Небольшое дополнение к принятому ответу: если база данных datetime хранится как UTC (что я всегда делаю), вам следует использовать gmdate("Y-m-d H:i:s") вместо date("Y-m-d H:i:s").

Или, если вы предпочитаете, чтобы MySQL обрабатывал все, как предлагают некоторые ответы, я бы вставил MySQL UTC_TIMESTAMP с тем же результатом.

Примечание: я понял вопрос, относящийся к текущему времени.

Ответ 13

Это более точный способ сделать это. Он ставит десятичные дроби за секундами, обеспечивая большую точность.

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

Обратите внимание на .uP.

Больше информации: fooobar.com/info/580506/...