У меня есть DateTime, который я хочу сохранить в столбце Date MySQL. Я использую MySQLi и подготовленные операторы.
При привязке параметров я не могу указать дату как тип, только строки и целые числа.
Как преобразовать DateTime в строковое представление даты MySQL? По классу DateTime очень мало документации.






Я почти закрыл это как дубликат Преобразование даты и времени MySQL в другой формат с помощью PHP, но я думаю, что на самом деле это обратная проблема. В этом вопросе спрашивалось, как отформатировать дату, полученную из MySQL, и вы спрашиваете, как отформатировать дату для ввода в запрос.
Опция 1:
SELECT * FROM MyTable WHERE DateTimeCol = ?
Вы можете отформатировать значение в формате YYYY-MM-DD HH:MM, который хочет MySQL:
<?php $mysql_date = date('Y-m-d H:i:s', $timestamp); ?>
Затем отправьте его в запрос как строковый параметр.
Вариант 2:
SELECT * FROM MyTable WHERE DateTimeCol = FROM_UNIXTIME(?)
Затем вы можете отправить значение временной метки в качестве числового параметра в запрос.
Вариант 3:
SELECT * FROM MyTable WHERE DateTimeCol = STR_TO_DATE(?, '%m/%d/%y')
Вы можете отправить большое количество строковых представлений даты / времени, если вы укажете форматирование функции MySQL STR_TO_DATE(). Коды форматирования см. В функции DATE_FORMAT().
Вторые необязательны, но да, это работает. Если вы используете «H» (12-часовой формат) вместо «G» (24-часовой формат), вам также следует включить AM / PM. Обратитесь к документации DATE_FORMAT () для получения полного списка кодов.
«h» - это 12-часовые часы, «H» - это 24 с ведущими нулями, а «G» - это 24 без ведущих нулей. Вы действительно должны использовать "H".
Я отредактировал строку формата в варианте 1 выше с учетом этих комментариев от ıu и christian studer.
Поскольку класс DateTime, представленный в PHP5, плохо документирован, я бы не рекомендовал его использовать. Я считаю, что с обычными временными метками работать намного проще!
Но если вы все еще хотите использовать DateTime-объекты, решением было бы преобразовать объекты в метки времени (unix) перед их сохранением в вашей базе данных. Преобразуйте метки времени обратно в DateTime-объекты после чтения информации из вашей базы данных.
Чтобы создать объект DateTime из метки времени, используйте date_create () с меткой времени в качестве аргумента. Чтобы получить представление объектов в секундах, прошедших с эпохи Unix, используйте date_format ($ объект, 'U') (U в верхнем регистре).
Почти закрыл это как повторяющийся вопрос, но потом я понял, что это другой вопрос, и снова открыл его. Прошу прощения за мою поспешность!