2011/02/24

曜日の算出 (Determine day of the week)

BI Publisherでは、テンプレート上で曜日を算出する関数(Excelのweekday関数のようなもの)は提供されていません。
データソース側での対応(曜日データの追加)が可能であればすぐに解決しますが、外部連携ファイルなど、仕様変更の難しいケースではロジックを手組みする必要があります。参考まで、サンプルを作成しました。
※例では'1905-01-01'を基準日としています。これは扱うデータがすべて1905年以降のデータであるという前提の定義です。基準日は、扱うデータよりも前の日付で、日曜日であれば同じ結果が得られます。

サンプルソースは以下の通りです。
2011-02-20 (SUN): <?xdoxslt:date_diff('d', '1905-01-01', '2011-02-20', $_XDOLOCALE, $_XDOTIMEZONE) mod 7?>
2011-02-21 (MON): <?xdoxslt:date_diff('d', '1905-01-01', '2011-02-21', $_XDOLOCALE, $_XDOTIMEZONE) mod 7?>
...
2011-02-26 (SAT): <?xdoxslt:date_diff('d', '1905-01-01', '2011-02-26', $_XDOLOCALE, $_XDOTIMEZONE) mod 7?>



実行結果は以下の通りです。曜日を1(日曜日)~7(土曜日)の値で取得できます。




以下の例では、PROC_DATEが月曜日の場合にメッセージを表示します。
<?if:(xdoxslt:date_diff('d', '1905-01-01', PROC_DATE, $_XDOLOCALE, $_XDOTIMEZONE) mod 7)=1?>
  今日は月曜日です。- Today is Monday.
<?end if?>


サンプルを作成してみたものの、日付に関わるロジックはやはりデータソース側で対応する方が効率がよいかもしれません。


[ Summary ]
As far as I checked, BI Publisher does not provide date functions to determine day of the week so far (Excel "weekday()" function like).
The example shows how to get the index (0 to 6).
The value '1905-01-01' is static.  This value should be Sunday, and it have to be earlier than the data that you manage.


I suppose this kind of logic should be handled in data source (program) side...





更新履歴

・2011-03-01: タイトルを修正



0 件のコメント:

コメントを投稿