Вопрос формата даты PHP - PullRequest
       1

Вопрос формата даты PHP

2 голосов
/ 13 февраля 2010

Я пытаюсь отформатировать некоторые даты в PHP (я программист на Coldfusion, поэтому синтаксис похож, но я застрял!).

Даты отлично форматируются на нужный мне дисплей. Однако все они возвращаются 1 января 1970 года.

Кто-нибудь может пролить свет на это?

Для справки, я извлекаю дату из столбца datetime в mySQL. Необработанная дата, которую я пытаюсь отформатировать, ...

2010-04-03 00: 00: 00

Вот строка кода, которую я использую ....

$xml_output .= "\t\t<eventdate>" . date("l jS F", $row['event_date']) . "</eventdate>\n";

Я хочу, чтобы он отображался как: суббота, 3 апреля

Буду признателен за любую помощь!

Simon

Ответы [ 5 ]

6 голосов
/ 13 февраля 2010

Второй параметр date() должен быть UNIX timestamp .

Сначала преобразуйте строку даты в метку времени, используя strtotime():

$timestamp = strtotime($row["event_date"]);
echo date("l jS F", $timestamp); // Saturday 3rd April 

Справочные страницы:

2 голосов
/ 13 февраля 2010

Функция date работает с меткой времени UNIX (т. Е. Числом секунд с 1 января 1970 года) , а не с датой, переданной строка.

Это означает, что вы должны сначала преобразовать дату в метку времени, используя strtotime, например:

$timestamp = strtotime('2010-04-03 00:00:00');

И затем вы можете использовать функцию date на этой отметке времени:

echo date('l jS F', $timestamp);

Что дает вам желаемый результат:

Saturday 3rd April
1 голос
/ 13 февраля 2010

В качестве альтернативы, вы можете позволить MySQL отформатировать для вас дату при извлечении (что делает код более чистым при создании вашего XML):

SELECT
  event_date,
  DATE_FORMAT( event_date, '%W %D %M' ) AS event_date_formatted
FROM
  ...

Тогда в PHP:

$xml_output .= "\t\t<eventdate>" . $row['event_date_formatted'] . "</eventdate>\n";

Также:
Функции форматирования даты в MySQL немного более гибкие, поскольку они не сильно зависят от меток времени Unix (если вы используете поля DATETIME, то есть). По общему признанию немного вряд ли возможно; но если ваша event_date превышает границы беззнаковых 32-битных целочисленных временных меток, вы в значительной степени испорчены функцией php date. Попробуйте отформатировать дату до 1 января 1970 года или после 19 января 2038 года, и вы поймете, что я имею в виду.

0 голосов
/ 13 февраля 2010

PHP функция даты ожидает получения метки времени Unix.

Измените формат даты, которую вы извлекаете из БД, в метку времени Unix.

0 голосов
/ 13 февраля 2010

Используйте функцию strftime() для преобразования даты и времени из базы данных в метку времени Unix, подходящую для date():

date("l jS F", strtotime($row['event_date']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...