前回に引き続き、いよいよ今回は本題に入ります。お題は「日付の表示形式の変更」です。
作成日や更新日列に表示される既定の日付の表示形式は "2008/1/18 22:30" です。データビューの XSLT を一部編集するだけで、これをいろいろなパターンの表示形式に手軽に変更できます。
今回はチーム サイトのドキュメントライブラリを使用して検証しています。
XSLTデータビューに変換する
- SharePoint Designer 2007 でチーム サイトを開き、Shared Document(共有ドキュメント)フォルダ内のFormsフォルダを展開する。
- Allitems.aspx (すべてのアイテムビュー) を開き、分割ビューにしておく
- アイテムが表示されている部分(ListViewWebParts)を右クリックし、「XSLTデータビューに変換」をクリックする。
XSLT データビューに変換したら、ソースコード内で "ddwrt:FormatDate" を探します。この"ddwrt:"で始まるものがデータビューのXSTL内で使用できる拡張関数です。詳細についてはFrontpage 2003 の頃のものですが、次の資料が参考になります(が、残念ながら日本語ではありません)。
SharePoint Data View Web Part Extension Functions in the ddwrt Namespace
この関数は次のように記述されている筈です。
"ddwrt:FormatDate(string(@Modified), number($Language), 5)"
最後の引数である "5" を別の値に変更すると表示形式を変えられます。ではこの関数の詳細を解説しましょう。まずは関数の定義からです。
ddwrt:FormatDate関数の定義
- ddwrt:FormatDate(date, lcid, formatflag)
date … 表示形式を変換する日付データ
lcid … ロケール (日本語だと 1041)
formatflag … 表示形式を示すフラグ。1,3,4,5,7,12,13,15 のうちいずれかの数値
以上から、先の記述内容は最初に "@Modified" とあることから 更新日時列のデータを変換しようとしていることがわかります。次が "number($Language)" でロケールを取得しています。最後の"5"は表示形式です。
- 1 に変更した場合→ 2008/1/22
- 3 に変更した場合→ 2008年1月22日
- 4 に変更した場合→ 0:03
- 5 に変更した場合→ 2008/1/22 0:03
- 7 に変更した場合→ 2008年1月22日 0:03
- 12 に変更した場合→ 0:03:00
- 13 に変更した場合→ 2008/1/22 0:03:00
- 15 に変更した場合→ 2008年1月22日0:03:00
こういった関数があるということを知っておくと、何かと便利です。次回はその他の関数をご紹介します。
こんにちは。いつも参考にさせていただいています。
記事のようにformatflagを指定することでいくつかのパターンには対応できると思いますが、これだけでは曜日などを出力することができません。(たぶん)
2008/04/01 (火) 22:00
こんな感じの自由な日付フォーマットを実現するには、formatflagの代わりに日付形式を文字列で指定します。
ddwrt:FormatDateTime(string(@EventDate) ,number($Language) ,'yyyy/MM/dd (ddd) HH:mm')
こんな感じ。
ちなみに (ddd) → dddd にすると (火) → 火曜日 になったりします。
tasumaruさん
コメントをありがとうございます。確かに、FormatDateTime関数もありましたね。これにカスタム DateTime 書式指定文字列を使ってやると表現の幅も広がりますね。
その辺の資料が何かまとまってないかなぁとちょっと調べたら、MSDNに記載がありますね。でも、説明があまり分かり易くはないので、tasumaruさんからご提示いただいたサンプルコードが一番分かりやすいです。
一応、ご参考まで。
http://msdn2.microsoft.com/ja-jp/library/8kb3ddd4(VS.80).aspx
このように、追加情報をいただけると、助かります。
今後ともよろしくお願いいたします。