関数索引
parseDateW3CDTF() 関数は W3CDTF 形式の日付表現を対応する数値形式に変換します。
W3CDTF 形式の時刻表現は下記の形式をとります。この形式は RSS 1.0 や Atom 1.0 などで使われる日付形式です。これらのフィード中の日付表現のパース(解析)には本関数を使用すると便利です。
(1) 年のみ
YYYY(例:2008)
(2) 年月
YYYY-MM(例:2008-06)
(3) 年月日
YYYY-MM-DD(例:2007-12-04)
(4) 年月日および時分とタイムゾーン
YYYY-MM-DDThh:mm+HHMM(例:2008-11-12T12:34+09:00)
(5) 年月日および時分秒とタイムゾーン
YYYY-MM-DDThh:mm:ss+HHMM(例:2008-11-12T12:34:56+00:00)
(6) 年月日および時分秒および秒以下の小数部分とタイムゾーン
YYYY-MM-DDThh:mm:ss.s+HHMM(例:2008-03-05T05:06:07.567+00:00)
タイムゾーンを示す +HHMM 部分は世界標準時 (GMT) との時差を表しています。値の範囲は -2359 から +2359 でなければなりません。タイムゾーンの指定には Z を指定することができます。(例:2008-12-02T12:03:15Z) この指定は +00:00 を指定した場合と同じで、時刻表現が GMT(UTC) であることを表します。
変換結果として返される値は、指定された時刻表現と、1970/01/01 00:00:00 GMTとの差をミリ秒単位で表した値となります。1970/01/01 00:00:00 GMT 以前の時刻表現は負の値となります。
変換したい時刻表現を指定します。時刻表現は、実在する正しい表現でなければなりません。例えば、2007 年は閏年ではありませんから「29 Feb 2007 13:20:35 GMT」は不正な時刻表現です。不正な時刻表現を与えた場合、戻り値は null (isNull() 関数が true を返す値)となります。
1970/01/01 00:00:00 GMT を数値表現に変換してみます。この変換の結果は 0 になります。
<body>
......
%parseDateW3CDTF("1970-01-01T00:00:00+00:00")%
......
</body>
1970/01/02 00:00:00 GMT を数値表現に変換してみます。この変換の結果は 86400000 になります。この値は 1 日(24時間)をミリ秒単位で表した値です。
<body>
......
%parseDateW3CDTF("1970-01-02T00:00:00+00:00")%
......
</body>
2007/02/29 13:20:35 JST を parseDateW3CDTF() 関数を使って数値表現に変換してみます。2007 年は閏年ではないので 02/29 という日付は不正です。parseDateW3CDTF() 関数は、渡された引数の日付表現が不正な場合には null を返します。 下記の例では isNull() が true となるため「日付表現に誤りがあります」と表示されます。
<wr-if condition="isNull(parseDateW3CDTF(\"2007-02-29T13:20:35+00:00\"))">
日付表現に誤りがあります。
</wr-if>
......
</body>
指定されている年月日と曜日が合致しない場合も変換結果は null となります。
W3CDTF 形式の日付を数値に変換し、再度、その結果を formatDateW3CDTF() 関数で W3CDTF 形式の日付表現にフォーマットしなおしてみます。同じ表現に戻ります。
<body>
......
%formatDateW3CDTF(parseDateW3CDTF("2008-02-29T13:20:35+00:00"), "+0000")%
......
</body>
RSS 1.0 形式で配布されている RSS フィードを取り込んで、フィード中の item 要素をその pubDate の日付の古い順にソートして表示してみます。
feed という名前の要素が定義されていて、そのタイプは XML リーダであるとします。取り込む XML の URL の先には RSS 2.0 形式の RSS フィードが置かれていてるものとします。
下記のサンプルは、その RSS フィードを読み取り、item 要素を日付順にソートして作表して表示しています。
<body>
......
<table>
<wr-for list="sort(feed.item, \"A\", \"number(parseDateW3CDTF(dc:date))\")" variable="x">
<tr>
<td>%formatDate(parseDateW3CDTF(x.dc:date), "yyyy/MM/dd (E)")%</td>
<td>%x.title%</td>
</tr>
</wr-for>
</table>
......
</body>
parseDate() の結果を、formatDate() 関数に渡して "yyyy/MM/dd (E)" 形式の日付表現にフォーマットしなおしています。