У меня есть таблица БД MySQL с именем столбца "timestamp"
, тип timestamp
и атрибут on update CURRENT_TIMESTAMP
и по умолчанию CURRENT_TIMESTAMP
,
Если я добавлю запись в таблицу, указав другие значения, но не отметку времени, отметка времени будет автоматически добавлена следующим образом: 2016-12-28 17:02:26
,
В PHP я запрашиваю таблицу, используя следующий запрос
SELECT * FROM history WHERE user_id = 9 ORDER BY timestamp ASC
Результат запроса сохраняется в $rows
и я использую foreach
создать массив с другими форматированными значениями. Я пытаюсь отформатировать метку времени в формате 24-часовой даты: dd/mm/yy, HH:MM:SS
,
Я пробовал оба date()
а также strftime()
функционирует следующим образом:
$formatted_datetime = strftime("%d %m %y %H %M %S", $row["timestamp"]);
$formatted_datetime = date("d/m/y, H:i:s", $row["timestamp"]);
Оба эти результата приводят к следующему уведомлению и неправильному выводу даты и времени, например 01 01 70 00 33 36
:
Примечание. Неправильно сформированное числовое значение, встречающееся в /home/ubuntu/workspace/pset7/public/history.php в строке 20
Я новичок в PHP и MySQL и до сих пор ни один из других вопросов или документации, которые я видел, не был успешно решен при выполнении этого преобразования. Я не понимаю, почему strftime()
не работает, ни как это сделать правильно?
Для этого используется ОО (и наиболее гибкий) способ DateTime
класс и использовать статический createFromFormat
способ создания нового экземпляра DateTime
объект:
$new_datetime = DateTime::createFromFormat ( "Y-m-d H:i:s", $row["timestamp"] );
Теперь вы можете использовать $new_datetime
объект для генерации любого строкового представления, которое вы хотите, вызывая объект format
метод:
echo $new_datetime->format('d/m/y, H:i:s');
Для загрузки, так как у вас есть DateTime
Объект теперь вы можете также любым способом преобразования (например, сдвиг часовых поясов или добавление дней), сравнение (больше или меньше, чем другой DateTime
) и различные расчеты времени (сколько дней / месяцев / и т. д.) между этим и другим DateTime
).
DateTime:http://php.net/manual/en/class.datetime.php
Узнать его. Любить это. Переживи это.
Обычно в MySQL дата и время сохраняются как YYYY-MM-DD HH:MM:SS (2016-12-20 18:36:14)
форматировать вы можете легко конвертировать их по своему усмотрению, используя формат даты, но сначала нужно преобразовать входные данные во время. Следующее сделает свое дело
$formatted_datetime = date("d/m/y, H:i:s", strtotime($row["timestamp"]));
Почему бы не заставить MySQL работать? И вы действительно хотите мм / дд / гг, а не дд / мм / гг?
SELECT *, DATE_FORMAT(timestamp, '%m/%d/%y, %T') formatted_date FROM ....
Затем вы можете извлечь отформатированную дату как $ row [‘formatted_date’].
Увидеть https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format
Я бы использовал Класс углерода и его форматирование строки
$carbon = Carbon::instance('2016-12-28 17:02:26');
Затем вы можете отформатировать его так, как вы хотите.