出力されたRSS データを利用しようとすると、問題が出る場面があったので挙げておきます。
$date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0);として更新時刻の文字列を作成しているが、フォーマットオプション'O' が返す値はサーバーのローカルタイムと基準時との時差です。 もし、ZONETIME にLOCALZONE と違う値を設定すると、日時はZONETIME を基準に、タイムゾーンはLOCALZONE を基準にしたものになってしまい、RSS リーダーなどで読み取ると正しい時刻に変換されません。
とりあえず、なパッチです
$lang = LANG; $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING); $self = get_script_uri(); + switch ($version) { + case '0.91': /* FALLTHROUGH */ + case '2.0': + $zone = (ZONETIME < 0) ? '-' : '+'; + $zone .= sprintf('%02d%02d', floor(abs(ZONETIME) / 60 / 60), abs(ZONETIME) / 60 % 60); + break; + case '1.0': /* FALLTHROUGH */ + $zone = (ZONETIME < 0) ? '-' : '+'; + $zone .= sprintf('%02d:%02d', floor(abs(ZONETIME) / 60 / 60), abs(ZONETIME) / 60 % 60); + break; + } // Creating <item> or <entry> $items = $rdf_li = '';
switch ($version) { case '0.91': /* FALLTHROUGH */ case '2.0': - $date = get_date('D, d M Y H:i:s T', $time); + $date = get_date('D, d M Y H:i:s ', $time) . $zone; $date = ($version == '0.91') ? ' <description>' . $date . '</description>' : ' <pubDate>' . $date . '</pubDate>'; $items .= <<<EOD
case '1.0': // Add <item> into <items> $rdf_li .= ' <rdf:li rdf:resource="' . $self . '?' . $r_page . '" />' . "\n"; - $date = substr_replace(get_date('Y-m-d\TH:i:sO', $time), ':', -2, 0); + $date = get_date('Y-m-d\TH:i:s', $time) . $zone; $items .= <<<EOD <item rdf:about="$self?$r_page"> <title>$title</title>