Какой правильный формат нужно передать функции date()
в PHP, если я хочу вставить результат в колонку MySQL типа datetime
?
Я пробовал date("Y-M-D G:i:s")
, но это просто вставляет "0000-00-00 00:00:00" каждый раз.
Проблема в том, что вы используете 'M'
и 'D'
, которые являются текстовыми представлениями, MySQL ожидает числовое представление формата 2010-02-06 19:30:13
.
Попробуйте: date("Y-m-d H:i:s")
, который использует числовые эквиваленты.
edit: поменял G
на H
, хотя это может и не повлиять, вы, вероятно, хотите использовать 24-часовой формат с ведущими 0.
Из комментариев php's date()
manual page:
<?php $mysqltime = date ("Y-m-d 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 = date_create()->format('Y-m-d H:i:s');
Это будет держать сервер'с текущие дату и время.
Формат метки времени в столбец 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 < 7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
Нет не нужно использовать дату() метод из PHP, если вы Don'т использовать метку времени. Если 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));
}
}
Используя Датавремя
класса в 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");
}
Небольшое добавление к принятой ответ: Если в базе данных датавремя
хранится в формате UTC (что я всегда делаю), вы должны использовать функцию gmdate (на"Г-м-д ч:я:Ы" - а) "вместо" дата (на"Г-м-д ч:я:Ы", у)`.
Или, если вы предпочитаете, чтобы позволить MySQL и обрабатывать все, так как некоторые ответы наводят, я хотел вставить в MySQL'ы UTC_TIMESTAMP
, с тем же результатом.
Примечание: Я понял вопрос, ссылаясь на текущее время.
Это более точный способ, чтобы сделать это. Это места после запятой за секунды дает больше точности.
в PHP $сейчас = дата('г-м-д\Ю:Я:ы.до' время());
Обратите внимание на `.вверх.
Подробнее: https://stackoverflow.com/a/6153162/8662476