Hogyan alakítsuk át PHP-ban az MySQL datatime adatokat RSS 2.0-ához szükséges RFC 822 formátumúvá?

Azt hiszem, hasznos lehet, ha szerepel erre itt egy használható megoldás, mert sehol sincs normálisan leírva, pedig gyakori feladat, hogy valaki RSS kimenetet szeretne kódolni. (Én most konkrétan az Országos Tüntetés Nyilvántartás fejlesztői blogjánál ütköztem bele ebbe a problémába).

Ugye a MySQL datatime formátumban tárolva így néz ki egy dátum:

2007-08-07 22:03:44

Az RSS 2.0-ához viszont RFC 822 formátum kell, ami így néz ki:

Tue, 07 Aug 2007 22:03:44 +0200

Nos, ennek a nagyobbik részét könnyűszerrel előállíthatjuk a MySQL formátum megfelelő szövegrészeinek pakolgatásával, azonban ott van az elején az a hülye hárombetűs jelzés, ami azt mutatja, hogy ez éppen a hét melyik napjára esik. Ilyet viszont az eredeti adatban nem találunk.

Nos, tudnunk kell, hogy a PHP az 1970 január 1. éjfél óta eltelt másodpercekben kezeli a dátumadatokat (ez a fenti példánál egészen pontosan 1186517024). Ezt hívjuk időbélyegnek, és az éppen aktuális időpontra vonatkozóan a time() paraméter nélküli PHP függvénnyel kérdezhetjük le.

Ezt az időbélyeget aztán könnyűszerrel alakíthatjuk RSS-hez szükséges formátumúvá (vagyis a hét napját is tartalmazó alakúvá) a date() beépített PHP függvény segítségével.

date (r, time() );

Ahol az r betű jelenti azt, hogy a választ RCF 822 (RSS) formátumban kérjük.

Igen ám, csakhogy mi most nem a pontos időnek, hanem egy adatbázisból kiolvasott dátumnak az időbélyegére vagyunk kíváncsiak. Szerencsére erre is van a kezünkben beépített PHP függvény mktime() néven, amelyik 6 különböző paramétert vár, ebben a sorrendben:

  1. óra
  2. perc
  3. másodperc
  4. hónap
  5. hónap napja
  6. év

Ha megfigyeljük, ezek közül már mindegyik adatot ki tudjuk hámozni a MySQL datatime formátumából. Erre szolgál a szövegrészletek kinyerését végző substr() nevű függvény. Ez első paraméterként az eredeti szöveget várja, második paraméterként azt, hogy melyik indexű karaktertől szeretnénk elvágni a szöveget, a harmadik, opcionális paraméterként pedig azt, hogy hány karakter hosszú szövegrészt kérünk.

Így például ennek, hogy

substr ('Szálasi Ferenc jó ember volt.', 8,7);

az a kimenete, hogy Ferenc.

Készen is vagyunk, ezek alapján meg is írhatjuk a függvényünket.

Megkapjuk a MySQL datatime értéket, előállítjuk belőle az időbélyeget, végül pedig ebből az RSS-nek megfelelő formátumot.

function rssDatum ($datetime)
{
     $ev = substr($datetime,0,4);
     $honap = substr($datetime,5,2);
     $nap = substr($datetime,8,2);
     $ora = substr($datetime,11,2);
     $perc = substr($datetime,14,2);
     $masodperc = substr($datetime,17,2);
     $idoBelyeg = mktime( $ora, $perc, $masodperc, $honap, $nap, $ev);
     $rssIdo = date(r, $idoBelyeg);
     return $rssIdo;
};

Ha ezt meghívjuk kiírásra:

echo rssDatum('2007-08-07 22:03:44');

Megkapjuk válaszként az RSS-kompatibilis kimenetet:

Tue, 07 Aug 2007 22:03:44 +0200

Ennyi.

By SoDI 


 
 
0 (0)
Jelentkezz be a szavazáshoz!