Форматиране на датата в RSS публикациите


Когато генерираме собствени RSS публикации, рано или късно се сблъскваме с проблема за формата на датата на всяка публикация. За съжаление избрания формат тук е RFC 822. При неправилно изписване на датата RSS публикацията не се валидира. Ето как изглеждат няколко такива дати:

Mon, 14 Feb 2011 00:09:04 +0200
Mon, 14 Feb 2011 00:09:04 GMT

Ето как да се генерират такива дати, използвайки основните езици в уеб програмирането.


PHP
 


В PHP използваме функцията date() с подходящо зададен параметър за формат. След разглеждане на наличните параметри, откриваме, че има създадена такава константа за удобство и тя е DATE_RSS. Тук има един важен момент - добре е да зададем на ръка часовата зона, в която искаме да е генерираната дата, а не да разчитаме на стойността по пордразбиране на сървъра. Това става с date_default_timezone_set(). Ето и един пример:

date_default_timezone_set('Europe/Sofia');
echo '<pubDate>' . date(DATE_RSS) . '</pubDate>';


MySQL
 


MySQL има вградена функция за форматиране на дата и час при извеждане на резултатите - DATE_FORMAT. Нека имаме таблицата posts(title varchar(80), date_created datetime). Тогава за подходящо извличане на данните използваме подобна заявка:

SELECT title, DATE_FORMAT(date_created,'%a, %d %b %Y %T') AS rss_date_created
FROM posts ORDER BY date_created DESC LIMIT 10


Така получаваме последните 10 поста, подредени по дата.


PostgreSQL
 


При PostgreSQL използваме функцията to_char() за преобразуване на дата към текстов еквивалент. Тук има следната особеност - съществуват два типа за съхранение на дата/час timestamp with time zone и timestamp without time zone. В първия случай нашата таблица би изглеждала по следния начин: posts(title varchar(80), date_created timestamp with time zone). Използваме подходящия низ за форматиране и получаваме следния фрагмент:

SELECT title, to_char(date_created, 'Dy, DD Mon YYYY HH24:MI:SS TZ') AS rss_date_created
FROM posts ORDER BY date_created DESC LIMIT 10;


При отсъствие на информация за зоната е нужно да е добави на ръка. За нашата таблица posts(title varchar(80), date_created timestamp without time zone) избираме зоната да бъде GMT. В такъв случай е нужно да се преизчислят датите срещу избраната зона. Така заявката добива следния вид:

SELECT title, to_char(dt::timestamptz AT TIME ZONE 'GMT', 'Dy, DD Mon YYYY HH24:MI:SS GMT') AS rss_date_created
FROM posts ORDER BY date_created DESC LIMIT 10;

Няма коментари

Обратно към списъка със статиите

Тази страница последно е променяна на 2024-04-29 02:48:31