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-код для создания переменной, которую я вставляю в столбец MySQL DATETIME.
$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)); } }
Comments