Каков самый простой способ отформатировать метку времени из SQL в PHP?

StackOverflow https://stackoverflow.com/questions/238071

Вопрос

Каков самый простой и быстрый способ завершить приведенный ниже код PHP так, чтобы выходные данные были в удобном для пользователя формате (например, «27 октября 2006 г.»)?

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = ???($row['my_timestamp']);
echo $formatted_date;
Это было полезно?

Решение

Вы можете использовать MySQL, чтобы сделать это для вас,

$result = mysql_query("SELECT DATE_FORMAT(my_timestamp, '%M %d, %Y) AS my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = $row['my_timestamp'];
echo $formatted_date;

Или используйте PHP,

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = strftime('%B %d, %y', $row['my_timestamp']);
echo $formatted_date;

Другие советы

Я обычно занимаюсь форматированием даты в SQL, например, Aron 's answer . Хотя для дат PHP я предпочитаю использовать объект DateTime ( PHP5 +) в течение даты :

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');

Вам нужна функция date () .

Если у вас есть столбец DATE или DATETIME, вы можете использовать SELECT UNIX_TIMESTAMP (mycolumn) AS mycolumn, чтобы преобразовать его в метку времени unix для использования функции date.

Вам обязательно следует использовать класс DateTime (или любой эквивалентный класс домашнего выращивания) вместо функции Date и не использовать временные метки:

  • Временная метка не работает во всех средах для дат до 1970 года — если вы имеете дело с днями рождения, вы полагаетесь на код, который может сломаться на некоторых серверах.
  • Будьте также очень осторожны при использовании strftime, это выглядит как хорошая функция, но она очень ненадежна, так как зависит от setlocale, который распространяется на весь процесс.Это означает, что если ваш сервер представляет собой окно Windows, у вас есть один процесс на процессор, а остальные являются многопоточными - другими словами, один setlocale в одном скрипте повлияет на другие скрипты на том же процессоре - очень неприятно. !

В конце концов, не полагайтесь на временные метки, если только вы не работаете в среде только на английском языке и не имеете дело только с датами между 1970 и 2032 годами...!

Если у вас есть таблицы, проиндексированные в этом поле даты, и вы используете функцию форматирования данных mysql при вызове .. (т. е. SELECT DATE_FORMAT (my_timestamp, '% M% d,% Y) AS my_time), это уничтожит ваша индексация. Что-то иметь в виду. Мы видели резкое увеличение скорости удаления всех функций из наших операторов sql и разрешения php обрабатывать все это. Функционирование, такое как форматирование дат и простая математика

Я использую:

дата (" F j, Y " ;, strtotime ($ row ['my_timestamp']))

или вы можете изменить SELECT на: DATE_FORMAT (поле, «% d% M,% Y») как datetime

У вас есть выбор. Вы можете использовать функцию date () в PHP и обрабатывать вывод из MySQL, или вы можете использовать date_format () функция в MySQL и она должна возвращать отформатированную строку для начала.

По моему опыту, не имеет значения, какой вы используете, но будьте последовательны. У них разные параметры форматирования, поэтому, если вы используете оба в заданном приложении, вы потратите много времени, пытаясь вспомнить, дает ли «W» название дня недели или недели года.

Пусть база данных выполнит форматирование за вас. Он гораздо менее подвержен ошибкам, потому что вы не читаете строку и не конвертируете ее. Вместо этого база данных переходит из своего собственного формата в строку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top