PHPの日付関数の定数は使いやすいのか

最近、日付関数で使える定数の存在を知りました。

以下の定数は PHP 5.1.1 以降で定義されており、標準的な日付の書式を表します。 日付フォーマット関数(date() など)で使用します。

DATE_ATOM (string)
Atom (例: 2005-08-15T15:52:01+00:00)
DATE_COOKIE (string)
HTTP クッキー (例: Monday, 15-Aug-05 15:52:01 UTC)
DATE_ISO8601 (string)
ISO-8601 (例: 2005-08-15T15:52:01+0000)
DATE_RFC822 (string)
RFC 822 (例: Mon, 15 Aug 05 15:52:01 +0000)
DATE_RFC850 (string)
RFC 850 (例: Monday, 15-Aug-05 15:52:01 UTC)
DATE_RFC1036 (string)
RFC 1036 (例: Mon, 15 Aug 05 15:52:01 +0000)
DATE_RFC1123 (string)
RFC 1123 (例: Mon, 15 Aug 2005 15:52:01 +0000)
DATE_RFC2822 (string)
RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)
DATE_RFC3339 (string)
DATE_ATOM と同じ (PHP 5.1.3 以降)
DATE_RSS (string)
RSS (Mon, 15 Aug 2005 15:52:01 +0000)
DATE_W3C (string)
World Wide Web コンソーシアム (例: 2005-08-15T15:52:01+00:00)
PHP: 日付・時刻関数 - Manual

AtomとかRSSとか、結構流行(?)にそったフォーマットが用意されている事に少し驚きつつ、Last-Modifiedとかに使えるのか悩んでいます。

If-Modified-Since = "If-Modified-Since" ":" HTTP-date
...
Last-Modified = "Last-Modified" ":" HTTP-date
...
HTTP-date = rfc1123-date | rfc850-date | asctime-date
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
rfc850-date = weekday "," SP date2 SP time SP "GMT"
asctime-date = wkday SP date3 SP time SP 4DIGIT
Hypertext Transfer Protocol -- HTTP/1.1 (RFC2616)

少なくとも、HTTP/1.1で定義されているHTTP-dateのうち、rfc1123-dateとrfc850-dateでは末尾のタイムゾーンが"GMT"で決めうちのようです。asctime-dateはタイムゾーンを使わない模様。あまりRFCと実際の実装について詳しくないので、あれですが、少なくともHTTPヘッダにおいては自分でフォーマットを書き続けた方がよろしそう。

以下は、自分の環境で先述の定数を書き出した結果です。

<?php
 
$date_const_list = array(
                         'DATE_ATOM',
                         'DATE_COOKIE',
                         'DATE_ISO8601',
                         'DATE_RFC822',
                         'DATE_RFC850',
                         'DATE_RFC1036',
                         'DATE_RFC1123',
                         'DATE_RFC2822',
                         'DATE_RFC3339',
                         'DATE_RSS',
                         'DATE_W3C',
                         );
 
foreach ($date_const_list as $date_const) {
    echo sprintf("%16s: %-16s\t%s\n",
                 $date_const,
                 constant($date_const),
                 date(constant($date_const)));
}
 
/** 結果
 *       DATE_ATOM: Y-m-d\TH:i:sP         2007-09-03T17:02:31+09:00
 *     DATE_COOKIE: l, d-M-y H:i:s T      Monday, 03-Sep-07 17:02:31 JST
 *    DATE_ISO8601: Y-m-d\TH:i:sO         2007-09-03T17:02:31+0900
 *     DATE_RFC822: D, d M y H:i:s O      Mon, 03 Sep 07 17:02:31 +0900
 *     DATE_RFC850: l, d-M-y H:i:s T      Monday, 03-Sep-07 17:02:31 JST
 *    DATE_RFC1036: D, d M y H:i:s O      Mon, 03 Sep 07 17:02:31 +0900
 *    DATE_RFC1123: D, d M Y H:i:s O      Mon, 03 Sep 2007 17:02:31 +0900
 *    DATE_RFC2822: D, d M Y H:i:s O      Mon, 03 Sep 2007 17:02:31 +0900
 *    DATE_RFC3339: Y-m-d\TH:i:sP         2007-09-03T17:02:31+09:00
 *        DATE_RSS: D, d M Y H:i:s O      Mon, 03 Sep 2007 17:02:31 +0900
 *        DATE_W3C: Y-m-d\TH:i:sP         2007-09-03T17:02:31+09:00
 */
 
?>

いつも、Last-Modifiedなどを書き出す際にフォーマットを忘れていて悩むので、楽ができればうれしかったのですが、タイムゾーンなどのあたりで結局悩むような気がします。
という訳で、存在だけは覚えておく事にします。


HTTP周りの処理(?)はフレームワークなりライブラリなりに面倒を見させるのがよい気がしますが、ちょっとした実験用スクリプトの場合はついつい都度書き(?)になってしまっています。。。

というか、そろそろHTTPリクエストを受けつける必要があるスクリプトもPythonで書くようにしないとなぁ。ついつい、楽をしてPHPで書いてしまいます(悪い事ではないのですが)。
やっぱ、PHPは慣れと配備の楽さがあります。

プロフィール

このブログ記事について

このページは、koshigoeが2007年9月 3日 17:25に書いたブログ記事です。

ひとつ前のブログ記事は「結局、"A-Im: feed"と条件付きGETの関係がよくわからない」です。

次のブログ記事は「PEAR::HTTP_Requestは自動的にchunkedを処理してくれる(ようだ(と思う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。