関数索引
parseDateRFC2822() 関数は RFC2822 形式の日付表現を対応する数値形式に変換します。
RFC2822 形式の時刻表現は下記の形式をとります。この形式は RSS 2.0 などで使われる日付形式です。RSS 2.0 中の日付表現の変換には本関数を使用すると便利です。
[wkday,] dd Mon yyyy HH:mm:ss +HHMM
wkday は Mon Tue Wed Thu Fri Sat Sun のいずれかです。曜日は省略可能です。Mon は Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec のいずれかです。+HHMM 部分は世界標準時との時差を表しています。値の範囲は -9959 から +9959 でなければなりません。時差の指定には "GMT" などの言わば略記形式も許されていますが、現在では、+0000 などの時差表現の使用が推奨されているようです。
変換結果として返される値は、指定された時刻表現と、1970/01/01 00:00:00 GMTとの差をミリ秒単位で表した値となります。1970/01/01 00:00:00 GMT 以前の時刻表現は負の値となります。
parseDateRFC2822Relaxed() 関数は、基本的に parseDateRFC2822() と同様に動作しますが、日付部分の解釈のルールが緩和されています。本来、RFC2822 に準拠した日付形式では、日付は 1 桁または 2 桁の数字で表わすことになっていますが、実際にネット上を流通する日付表現の中には 1st や 2nd など、厳密には RFC2822 に準拠しない日付表現が存在しています。そのような形式の日付をパースする場合には parseDateRFC2822Relaxed() 関数を使用してください。parseDateRFC2822Relaxed() 関数は日付形式に、本来の 1 桁または 2 桁の数字以外に 1st 2nd 3rd および th で終る日付型式 (21st や 22nd などを含む)を受けいれます。
変換したい時刻表現を指定します。時刻表現は、実在する正しい表現でなければなりません。例えば 2007 年は閏年ではないので「29 Feb 2007 13:20:35 GMT」は不正な時刻表現です。不正な時刻表現を与えた場合、戻り値は null (isNull() 関数が true を返す値)となります。
1970/01/01 00:00:00 GMT を数値表現に変換してみます。この変換の結果は 0 になります。
<body>
......
%parseDateRFC2822("01 Jan 1970 00:00:00 GMT")%
......
</body>
1970/01/02 00:00:00 GMT を数値表現に変換してみます。この変換の結果は 86400000 になります。この値は 1 日(24時間)をミリ秒単位で表した値です。
<body>
......
%parseDateRFC2822("02 Jan 1970 00:00:00 GMT")%
......
</body>
2007/02/29 13:20:35 JST を parseDate() 関数を使って数値表現に変換してみます。2007 年は閏年ではないので 02/29 という日付は不正です。parseDateRFC2822() 関数は、渡された引数の日付表現が不正な場合には null を返します。 下記の例では isNull() が true となるため「日付表現に誤りがあります」と表示されます。
<body>
......
<wr-if condition="isNull(parseDateRFC2822(\"29 Feb 2007 13:20:35 GMT\"))">
日付表現に誤りがあります。
</wr-if>
......
</body>
指定されている年月日と曜日が合致しない場合も変換結果は null となります。
RFC2822 形式の日付を数値に変換し、再度、その結果を formatDateRFC2822() 関数で RFC2822 形式の日付表現にフォーマットしなおしてみます。同じ表現に戻ります。
<body>
......
%formatDateRFC2822(parseDateRFC2822("Fri, 29 Feb 2008 13:20:35 GMT"), "+0000")%
......
</body>
RSS 2.0 形式で配布されている RSS フィードを取り込んで、フィード中の item 要素をその pubDate の日付の古い順にソートして表示してみます。
feed という名前の要素が定義されていて、そのタイプは XML リーダであるとします。取り込む XML の URL の先には RSS 2.0 形式の RSS フィードが置かれていてるものとします。
下記のサンプルは、その RSS フィードを読み取り、item 要素を日付順にソートして作表して表示しています。
<body>
......
<table>
<wr-for list="sort(feed.channel.item, \"A\", \"parseDateRFC2822(pubDate)\")" variable="x">
<tr>
<td>%formatDate(parseDateRFC2822(x.pubDate), "yyyy/MM/dd (E)")%</td>
<td>%x.title%</td>
</tr>
</wr-for>
</table>
......
</body>
parseDate() の結果を、formatDate() 関数に渡して "yyyy/MM/dd (E)" 形式の日付表現にフォーマットしなおしています。