2008-10-26 5 views
10

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

$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; 

ответ

22

Вы можете использовать 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; 
+1

FYI, закрывающая кавычка для параметра формата в примере `DATE_FORMAT()` отсутствует – Alfie 2014-04-01 12:56:44

0

Я использую:

даты ("F J, Y", StrToTime ($ строки [ 'my_timestamp']))

или вы можете изменить Выбор: DATE_FORMAT (поле, '% d% M,% Y'), как DateTime

2

Вы хотите функцию date().

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

0

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

По моему опыту, на самом деле не имеет значения, что вы используете, но БУДЬТЕ СОГЛАСНЫ. Они имеют разные параметры форматирования, поэтому, если вы используете оба в данном приложении, вы потратите много времени, пытаясь запомнить, если «W» дает вам имя дня недели или недели года.

10

Я обычно делаю форматирование даты в SQL, например Aronanswer. Хотя для дат 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

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

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

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

1

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

0

Имейте базу данных для форматирования. Это гораздо менее восприимчиво к ошибке, потому что вы не читаете строку и не конвертируете ее. Вместо этого база данных переходит из собственного формата в строку.