Формат 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`
формат 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));
}
}