Формат 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/...