У меня есть дата и время, поступающие из выбранной формы в формате 12:00 PM Sat Mar 15 чисто из эстетических соображений. Функция PHP strtotime преобразует это в (и более чем вероятно справедливо): 1394866800.

Однако, когда я готовлю время для своей базы данных $db_time = date('Y-m-d H:i:s', $time_req);, я получаю 2014-03-15 00:00:00. Есть ли способ сохранить визуально привлекательное отображение времени, но при этом ввести правильный формат в мою базу данных MySQL?

3
user3423909 15 Мар 2014 в 22:38
 – 
Mark Baker
15 Мар 2014 в 22:44
«исключительно из эстетических соображений» — элемент option имеет атрибут value помимо его текстового содержимого… последний следует использовать только из «эстетических соображений», тогда не пришлось бы заморачиваться такими вещами.
 – 
CBroe
15 Мар 2014 в 23:03

2 ответа

Лучший ответ

Проблема в том, что вы вводите нестандартный формат, потому что сначала идет время, затем день недели, затем месяц и день месяца. Вам нужно указать PHP, как это интерпретировать.

Вы можете использовать date_create_from_format , вот так:

$formatted_date = '12:00 PM Sat Mar 15';
// to use your POST data, use $formatted_date = $_POST['time_req'];
echo date_create_from_format('H:i A D M j', $formatted_date)->format('Y-m-d H:i:s');

Вывод:

2014-03-15 12:00:00

Примечание. Вышеупомянутая процедура представляет собой однострочную процедурную версию метода DateTime::createFromFormat, как указано @MarkBaker в комментариях. Вы также можете:

$formatted_date = '12:00 PM Sat Mar 15';
// to use your POST data, use $formatted_date = $_POST['time_req'];

// create an object
$mydate = DateTime::createFromFormat('H:i A D M j', $formatted_date);
// invoke the format method
echo $mydate->format('Y-m-d H:i:s');
2
elixenide 15 Мар 2014 в 23:50
Проголосовал за этот из-за большего контекста и упрощенного метода получения правильного формата для вставки.
 – 
PlantTheIdea
15 Мар 2014 в 22:55
Я продолжаю получать «Уловимую фатальную ошибку: объект класса DateTime не может быть преобразован в строку в... Это несмотря на то, что я привожу входящую переменную $_POST к строке: $time_req = (string)$_POST['time_req']; я Я уверен, что это правильный ответ. Есть мысли?
 – 
user3423909
15 Мар 2014 в 23:40
Из этого комментария мне не ясно, какая часть является вашим фактическим кодом. Просто поставьте $_POST['time_req'] там, где вы видите '12:00 PM Sat Mar 15' в моем ответе; не нужно ничего приводить к строке. Пример: echo date_create_from_format('H:i A D M j', $_POST['time_req'])->format('Y-m-d H:i:s');
 – 
elixenide
15 Мар 2014 в 23:48
Отредактировал мой ответ, чтобы попытаться уточнить, как именно вы можете это использовать.
 – 
elixenide
15 Мар 2014 в 23:50
Совершенно верно добрый друг. Моя ошибка. +100 советов по Fedora
 – 
user3423909
15 Мар 2014 в 23:58

Используйте DateTime::createFromFormat()

$st = "12:00 PM Sat Mar 15";

$datetime = DateTime::createFromFormat("H:i A D M j", $st);
$mysql_formatted = $datetime->format("Y-m-d H:i:s");
1
salathe 15 Мар 2014 в 22:59