Как конвертировать MySQL TIMESTAMP в дату в Stack Overflow

У меня есть таблица БД 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() не работает, ни как это сделать правильно?

5

Решение

Для этого используется ОО (и наиболее гибкий) способ 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
Узнать его. Любить это. Переживи это.

6

Другие решения

Обычно в 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"]));
2

Почему бы не заставить 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

1

Я бы использовал Класс углерода и его форматирование строки

$carbon = Carbon::instance('2016-12-28 17:02:26');

Затем вы можете отформатировать его так, как вы хотите.

0
По вопросам рекламы [email protected]