Какой самый простой способ отформатировать метку времени из SQL в PHP? - PullRequest
10 голосов
/ 26 октября 2008

Какой самый простой и быстрый способ дополнить приведенный ниже код 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;

Ответы [ 8 ]

22 голосов
/ 26 октября 2008

Вы можете использовать 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;
10 голосов
/ 26 октября 2008

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

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');
2 голосов
/ 26 октября 2008

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

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

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

2 голосов
/ 26 октября 2008

Требуется функция date () .

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

1 голос
/ 27 октября 2008

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

0 голосов
/ 27 октября 2008

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

0 голосов
/ 26 октября 2008

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

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

0 голосов
/ 26 октября 2008

Я использую:

date ("F j, Y", strtotime ($ row ['my_timestamp']))

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

...