RSSの日付処理でつまったのでメモ

MagpieRSSを利用してPHPで外部のRSS取得したとき、日付処理でつまずいた。

最初単純に全部strtotime()してたけど、PHP4のstrtotime()はPHP5のstrtotime()と違って、変換に失敗することがあるのね。
なもんで、ふつうに読み込むとAtom形式で吐かれた時刻とかをぶちこむと、時刻表示がおかしくなる。
そもそも私はPHP4環境で出さないとなのに、最初うっかりPHP5の環境でつくってたもんで、これでこけたわけです。

せっかくライブラリ使ってるし、rss_utils.inc読み込ませて、parse_w3cdt()したりもしたけど、なんとなくもやっとした感じだった。ていうかやっぱりAtom形式の読み込みで、つまずいてしまった。


そもそもRSS配信される日付というのが

Atom
2010-01-18T23:55:00Z
【Rss1.0】
2009-12-22T16:00:00+09:00
【Rss2.0】
Wed, 20 Jan 2010 19:26:13 +0900

こんなかんじみたい。
手前の環境で読み込むものしか確認してないので若干RSSの宣言が怪しい気がするけど(あとで仕様確認する…)、とりあえずこれを統一できるように、すりあわせしてみた。


こんなかんじ。

(isset($item['pubdate'])) ? $time = $item['pubdate'] : $time = $item['published'] ;
(isset($time) ) ? $time : $time = $item['dc']['date'];
if(isset($item['published']) || isset($item['dc']['date'])){
	$time2 =explode('-',$time); $timestamp =mktime(0, 0, 0,$time2[1],$time2[2],$time2[0]);
	$date = $timestamp;
}else{
	$date = strtotime( $time ) ;
}	

で、$dateをdate()で整形した。


もっとうまい記述とか、やりかたがあるのかもしれない。
この記述じゃだめだろとか、もっといい処理ありましたら、是非ご指摘ください。。。