DATE_RFC822とDATE_RFC2822

HTMLScrapingのサンプルスクリプトHTMLToFeed.class.phpで、RSSを作成しています。


その際、はき出すRSSの「年」が

Thu, 02 Jul 09 00:00:00 +0900

となってしまい、2009と表示されない問題がありました。


問題を解決したので、メモしておきます。



HTMLToFeed.class.phpで日付が関係するのは、以下の部分です。

$channel_element->appendChild($doc->createElement('lastBuildDate', date(DATE_RFC822, time())));


pubDateについても同じような行があります。
DATE_RFC822で、出力される日付の形式を指定しています。


PHP: date - Manual
 http://jp.php.net/manual/ja/function.date.php

DateTime::RFC822
DATE_RFC822
RFC 822 (例: Mon, 15 Aug 05 15:52:01 +0000)

DateTime::RFC2822
DATE_RFC2822
RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)


PHP: DateTime - Manual 定義済み定数
 http://jp.php.net/manual/ja/class.datetime.php#datetime.constants.types



以上を見ればわかるように、DATE_RFC822だと2桁、DATE_RFC2822だと4桁で年を表示します。
ですからDATE_RFC822をDATE_RFC2822に書き換えればOK。


バグか?というとそうではなくて、DATE_RFC822が旧仕様ということみたいです。
そこらへんの変遷はよくわかりませんが。


ぐぐってヒットした、以下のやりとりを読んでて気付きました。

▽[PHP-users 29199] imap_append
 http://www.nabble.com/-PHP-users-29199---imap_append-td4367964.html


あたりさえつけば必要な情報がカンタンにみつかる。イイ時代ですねぇ。
あたりがつかないときは大変なんですけど(^_^;