Каков правильный формат для передачи функции date()
в PHP, если я хочу вставить результат в столбец типа datetime
MySQL?
Я пробовал date("YMD G:i:s")
но это просто вставляет «0000-00-00 00:00:00» каждый раз.
Проблема в том, что вы используете 'M'
и 'D'
, которые представляют собой текстовые представления, MySQL ожидает числовое представление формата. 2010-02-06 19:30:13
Попробуйте: date("Ymd H:i:s")
который использует числовые эквиваленты.
отредактируйте: переключитесь на G
на H
, хотя это может и не повлиять, вы, вероятно, захотите использовать 24-часовой формат с ведущими 0.
Из комментариев справочной страницы date()
php:
<?php $mysqltime = date ("Ymd H:i:s", $phptime); ?>
У вас был «Y» правильный – это полный год, но «M» – трехзначный месяц, а «m» – двухзначный месяц. Такая же проблема с «D» вместо «d». «G» – это 1 или 2-значный час, где «H» всегда имеет преимущество 0 при необходимости.
Вот альтернативное решение: если у вас есть дата в 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 | +---------------------+
Я использую следующий PHP-код для создания переменной, которую я вставляю в столбец MySQL DATETIME.
$datetime = date_create()->format('Ymd H:i:s');
Это будет содержать текущую дату и время сервера.
Отметьте штамп времени для столбца MySQL DATETIME:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
Формат MySQL datetime с PHP
$date = "'".date('Ymd H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
$date_old = '23-5-2016 23:15:23'; //Date for database $date_for_database = date ("Ymd H:i:s", strtotime($date_old)); //Format should be like 'Ymd H:i:s'`enter code here`
Нет необходимости использовать метод date () из PHP, если вы не используете временную метку. Если dateposted
– столбец datetime, вы можете вставить текущую дату следующим образом:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Я использую эту функцию (PHP 7)
function getDateForDatabase(string $date) : string { $timestamp = strtotime($date); $date_formated = date('Ymd H:i:s', $timestamp); return $date_formated; }
Старые версии PHP (PHP <7)
function getDateForDatabase($date) { $timestamp = strtotime($date); $date_formated = date('Ymd H:i:s', $timestamp); return $date_formated; }
Это сводило меня с ума, ища простой ответ. Наконец, я сделал эту функцию, которая, кажется, улавливает все данные и дает хорошую строку 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('Ym-d', strtotime('1999-12-31')); } if (($t = strtotime($date)) === false) { //use 1999-12-31 as a valid date or as an alert return date('Ym-d', strtotime('1999-12-31')); } else { return date('Ymd H:i:s', strtotime($date)); } }