У меня возникли проблемы с сохранением метки времени в моей базе данных MySQL. В этом случае пользователь вводит дату в текстовое поле в формате дд/мм/гггг, и я хочу, чтобы она сохранялась как отметка времени.
Проблема в том, что он всегда жалуется на неправильный формат.
До сих пор я пробовал:
$d = DateTime::createFromFormat("d/m/Y H:i:s", $request['b_date'] . " 00:00:00");
// or
$d = Carbon::parse($request['b_date']);
// or
$d = Carbon::createFromFormat("d/m/Y H:i:s", $request['b_date'] . " 00:00:00");
// so that I can
$p->b_date = $d;
Но это никогда не позволяет мне сохранить его. Вот журнал:
[2019-05-29 15:14:02] local.ERROR: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1111-11-11 00:00:00' for column 'b_date' at row 1 ...
Я пытался сделать это часами. Что мне не хватает?
И как «1111-11-11 00:00:00» может быть недопустимым значением даты и времени?
Это! Большое спасибо! Ваша подсказка решила мою проблему. Теперь это работает.
@LuísHenriques, пожалуйста, предоставьте свое решение в качестве ответа на свой вопрос, чтобы это могло помочь другим людям с той же проблемой.
Объявление типа данных как DateTime в сценарии миграции сработало для меня.
...
Schema::create(...
$table->dateTime('b_date'); // use dateTime instead of timestamp
...
Настройка его с помощью углерода в контроллере:
...
$p->b_date = Carbon::createFromFormat("d/m/Y H:i:s", $input['b_date'] . " 00:00:00");
...
Это тип данных
timestamp
?TIMESTAMP has a range of '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC.
УDatetime
диапазон больше,1000
-9999
. -dev.mysql.com/doc/refman/8.0/en/datetime.html