個人的な備忘録を兼ねて。
PHPでRSSファイルを読み込み、任意の書式に整形して表示させるという処理をするとき、日時データの扱い方が「pubDate」の場合と「dc:date」の場合とで異なるため、意識してコードを書かないとエラーを起こす原因になります。
参考までに幾つかのRSSをの書式を調査してみると、[RSS 2.0]の場合では日時の情報は以下のように書かれています。
<pubDate>Wed, 15 Oct 2014 22:00:59 +0000</pubDate>
対して[RSS 1.0]では以下のように。
<dc:date>2014-10-15T18:12:00+09:00</dc:date>
[RSS 2.0]のときは「pubDate」が。[RSS 1.0]のときは「dc:date」が使われています。
さて。
これらRSSの情報をPHPで取得するとき、具体的には[simplexml_load_file()]関数を使いますが、このとき、読み込むファイルの形式が[RSS 1.0]の場合、日付データの[dc:date]など、「dc:」が書かれている情報は、特殊な処理を施してあげないと正確に取得・表示することができません。
例えば[RSS 2.0]の日付データ「pubDate」を読み込むときは以下のコードで充分です。
$date = date("Y年 n月 j日", strtotime($item->pubDate));
しかし[RSS 1.0]の日付データ「dc:date」を読み込む場合は、以下のように記述する必要があります。
$date = date('Y年 m月 d日', strtotime($item->children("http://purl.org/dc/elements/1.1/")->date));
これは、XMLでは「:」は名前空間(namespace)を意味していて、PHPの[simplexml_load_file()]関数のでは取得できない仕様になっているためです。
[simplexml_load_file()]関数で、ある名前空間に属する要素を取得するには、その名前空間を定義しているURLを引数として渡し、「childrenメソッド」を呼ぶ必要があります。
[RSS 1.0]では「dc」の名前空間は「xmlns:dc="http://purl.org/dc/elements/1.1/"」
と定義されているので、これを引数として指定します。
以下、過去記事「【PHP】外部サイトのRSS情報を取得して表示させる方法」も参考にしてみてください。