так как вы не предоставляете параметр для даты, вы действительно хотите записать текущее время?
Марк Эллиот
Ответы:
680
Проблема в том, что вы используете 'M'и 'D', которые являются текстовыми представлениями, MySQL ожидает числовое представление формата2010-02-06 19:30:13
Попробуйте: date("Y-m-d H:i:s")который использует числовые эквиваленты.
edit: переключено Gна H, хотя это может не иметь влияния, вы, вероятно, захотите использовать 24-часовой формат с ведущими нулями.
это должен быть один из самых распространенных форматов даты и времени, который когда-либо понадобится. должна быть встроенной в php global или частью самой функции date (например, 'c', 'r')
billynoah
33
Почему это не так, я не знаю. Я должен ссылаться на переполнение стека каждый. не замужем. функционирование. время.
Мазатек
11
Это быстрее прийти сюда, чем искать в моем коде такое использование.
MRodrigues
64
Просто подумал , что мило мнемонические для запоминания формат: « У нашего м у д ел не Его ». работает на многих уровнях :)
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime);?>
Вы правильно указали букву «Y» - это полный год, но «M» - это трехзначный месяц, а «m» - двузначный месяц. Та же проблема с «D» вместо «d». «G» - это час с 1 или 2 цифрами, где «H» всегда имеет ведущий 0, когда это необходимо.
Спасибо @Pekka - я помню, когда у нас с тобой был примерно один и тот же представитель - ты был довольно активным.
Тим Литл
1
да, я сейчас много работаю, и ТАК мое любимое времяпрепровождение :), которое снова изменится.
Пекка
41
Вот альтернативное решение: если у вас есть дата в PHP как временная метка, обходите обработку с помощью PHP и позвольте БД позаботиться о преобразовании ее с помощью FROM_UNIXTIMEфункции.
@trejder, кто тебе сказал, что делать это в mysql быстрее, чем делать в php? Делать это в PHP лучше, потому что БД обычно является узким местом, и вы хотите входить и выходить как можно скорее .
Pacerier
1
@Pacerier DB является узким местом, если у вас плохо построенная БД или вы выполняете слишком много небольших запросов вместо более надежного эффективного отдельного запроса, или во многих случаях, если вы используете ORM для управления базой данных. Твердый SQL с хорошо проиндексированной реляционной базой данных не медленный.
mopsyd
2
@mopsyd, БД является узким местом, потому что масштабирование по горизонтали требует сложности. Сравните это с веб-серверами, которые можно дублировать по всему миру без каких-либо изменений кода.
Pacerier
1
Если запрос не выполнен, где-то зарегистрировано, и вам нужно его отладить, тогда отметка времени будет намного сложнее, чем отформатированная строка даты, описанная @ tim-lytle.
хумбадс
27
Я использую следующий код PHP для создания переменной, которую я вставляю в столбец MySQL DATETIME.
$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`
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как он отвечает на вопрос, значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения и исправить проблемы с форматированием.
Тоби Спейт
9
Отформатируйте метку времени в столбце DATAETIME MySQL:
Я проголосовал за ваш ответ, потому что он сработал после того, как я отредактировал первую строку; function getDateForDatabase(string $date) : string {чтобы function getDateForDatabase($date) {Почему объявления типа выдаст ошибку я не знаю достаточно , чтобы сказать PHP.
Крис Пинк
«Аргумент 1, переданный getDateForDatabase (), должен быть экземпляром строки, заданной строки», - мой ввод был строкой,
Крис Пинк
7
Нет необходимости использовать метод date () из PHP, если вы не используете метку времени. Если datepostedэто столбец даты и времени, вы можете вставить текущую дату следующим образом:
$db->query("INSERT INTO table (dateposted) VALUES (now())");
Спасибо за то, что поделились этим подходом. Это самый простой метод, который я видел до сих пор.
Shondeslitch
2
Это сводило меня с ума в поисках простого ответа. Наконец я сделал эту функцию, которая, кажется, перехватывает весь ввод и дает хорошую строку SQL, которая является правильной или, по крайней мере, допустимой и проверяемой. Если это 1999-12-31, это, вероятно, неправильно, но в MySQL не возникнет серьезная ошибка.
functionMakeSQLDate($date){if(is_null($date)){//use 1999-12-31 as a valid date or as an alertreturn date('Y-m-d', strtotime('1999-12-31'));}if(($t = strtotime($date))===false){//use 1999-12-31 as a valid date or as an alertreturn date('Y-m-d', strtotime('1999-12-31'));}else{return date('Y-m-d H:i:s', strtotime($date));}}
Небольшое дополнение к принятому ответу: если база данных datetimeхранится как UTC (что я всегда делаю), вы должны использовать gmdate("Y-m-d H:i:s")вместо date("Y-m-d H:i:s").
Или, если вы предпочитаете, чтобы MySQL обрабатывал все, как предлагают некоторые ответы, я бы вставил MySQL UTC_TIMESTAMP с тем же результатом.
Примечание: я понял вопрос, относящийся к текущему времени.
Ответы:
Проблема в том, что вы используете
'M'
и'D'
, которые являются текстовыми представлениями, MySQL ожидает числовое представление формата2010-02-06 19:30:13
Попробуйте:
date("Y-m-d H:i:s")
который использует числовые эквиваленты.edit: переключено
G
наH
, хотя это может не иметь влияния, вы, вероятно, захотите использовать 24-часовой формат с ведущими нулями.источник
Из комментариев на
date()
странице руководства php :Вы правильно указали букву «Y» - это полный год, но «M» - это трехзначный месяц, а «m» - двузначный месяц. Та же проблема с «D» вместо «d». «G» - это час с 1 или 2 цифрами, где «H» всегда имеет ведущий 0, когда это необходимо.
источник
Вот альтернативное решение: если у вас есть дата в PHP как временная метка, обходите обработку с помощью PHP и позвольте БД позаботиться о преобразовании ее с помощью
FROM_UNIXTIME
функции.источник
Я использую следующий код PHP для создания переменной, которую я вставляю в столбец MySQL DATETIME.
Это будет содержать текущую дату и время сервера.
источник
источник
Отформатируйте метку времени в столбце DATAETIME MySQL:
источник
Формат даты и времени MySQL с PHP
источник
Я использую эту функцию (PHP 7)
Старые версии PHP (PHP <7)
источник
function getDateForDatabase(string $date) : string {
чтобыfunction getDateForDatabase($date) {
Почему объявления типа выдаст ошибку я не знаю достаточно , чтобы сказать PHP.Нет необходимости использовать метод date () из PHP, если вы не используете метку времени. Если
dateposted
это столбец даты и времени, вы можете вставить текущую дату следующим образом:источник
Это сводило меня с ума в поисках простого ответа. Наконец я сделал эту функцию, которая, кажется, перехватывает весь ввод и дает хорошую строку SQL, которая является правильной или, по крайней мере, допустимой и проверяемой. Если это 1999-12-31, это, вероятно, неправильно, но в MySQL не возникнет серьезная ошибка.
источник
Использование
DateTime
класса в PHP7 +:источник
Небольшое дополнение к принятому ответу: если база данных
datetime
хранится как UTC (что я всегда делаю), вы должны использоватьgmdate("Y-m-d H:i:s")
вместоdate("Y-m-d H:i:s")
.Или, если вы предпочитаете, чтобы MySQL обрабатывал все, как предлагают некоторые ответы, я бы вставил MySQL
UTC_TIMESTAMP
с тем же результатом.Примечание: я понял вопрос, относящийся к текущему времени.
источник
Это более точный способ сделать это. Он ставит десятичные дроби за секундами, давая большую точность.
Обратите внимание
.uP
.Дополнительная информация: https://stackoverflow.com/a/6153162/8662476
источник