Конвертируйте PHP datetime в MySQL RFC-822, действительный Date-Time для RSS-канала - PullRequest
3 голосов
/ 24 февраля 2011

Я хочу добавить дату / время, созданные на PHP, в MySQL, которые действительны в RSS-канале.

Я использую в PHP

$d = date( 'Y-m-d H:i:s T', time() );
$mysqldate = gmdate(DATE_RSS, strtotime($d));

вставить это в поле DATETIME в моей базе данных

Но сохраняет его в этом формате Wed, 02 Oct 2002 08:00:00

и он должен быть в этом формате, чтобы быть действительным RFC-822 Wed, 02 Oct 2002 08:00:00 EST

Ответы [ 6 ]

4 голосов
/ 24 февраля 2011

Почему вы конвертируете дату в php в строку, а затем снова конвертируете эту строку обратно в объект datetime? это серьезная трата процессорных циклов. почему бы просто не сделать

$mysqldate = gmdate(DATE_RSS, time())?

также, gmdate генерирует метку времени UTC, для которой нет часового пояса - это всегда GMT + 0

4 голосов
/ 24 февраля 2011

Используйте DATE_RFC822 вместо DATE_RSS

3 голосов
/ 10 августа 2015

Ответ очень прост, просто используйте этот формат:

<pubDate>'.date('r', strtotime($rss_row['your_date_field'])).'</pubDate>

Исходное эхо:

echo date('r', strtotime($my_date));

Это превращает дату и время из нашей таблицы MySQL, которая отформатирована как: ГГГГ-ММ-ДД ЧЧ: ММ: СС, и превращает ее в строку UNIX, которая представляет ту же дату.

Как только мы сделаем это до нашей даты, в нашем распоряжении будет множество чудесных функций date (). Окунуться в эти чудеса - это больше, чем я здесь, но я написал об этом здесь.

В этом конкретном случае добавление параметра 'r' в функцию date () выполняет всю работу по переформатированию нашей строки UNIX в наш формат даты RSS-канала.

Это так просто.

1 голос
/ 02 августа 2013
date('r', strtotime($object->pubDate))

- хорошо работает

1 голос
/ 24 февраля 2011

При сохранении чего-либо в поле MySQL DATETIME вы не можете указать формат.DATETIME хранятся во внутреннем формате, который касается только значения времени , а не форматирования.Вам всегда нужно форматировать дату так, как вам нужно после (или во время) извлечения ее из базы данных:

date(DATE_RSS, strtotime($dateFromDatabase));

Чтобы вставить дату в базу данных, вам просто нужнопредоставьте его в формате, понятном MySQL, затем он будет преобразован во внутренний формат, и форматирование будет потеряно:

sprintf("INSERT INTO `foo` (`date`) VALUES('%s')", date('Y-m-d H:i:s'))
0 голосов
/ 24 февраля 2011

На самом деле поля DATETIME не сохраняют никакой информации о часовом поясе (http://dev.mysql.com/doc/refman/5.1/en/datetime.html).

. Поэтому вам нужно добавить часовой пояс ПОСЛЕ получения даты из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...