:::: MENU ::::

Salesforceの日付項目を時間・分・秒・曜日も表示させる

Pocket

Salesforceを使っていて地味に困る問題。
標準項目で用意されている「作成日」「最終更新日」などが、
日付項目として用意されていること。
結構こういうのは時間まで知りたい場合が多い。

カスタム項目であれば日付/時間項目で作成すればいいのだが、
標準項目となると型変換はできない。

なのでカスタム項目の数式で「作成日」「最終更新日」を
読み込んで時間や曜日を表示させる必要がある。

カスタム項目の作成へは以下の手順でいける。

設定 → アプリケーションの設定 → リード → 項目 → カスタム項目の「新規」を押下

時間・分・秒まで表示させる

データ型は「数式」を選択 → 「日付/時間」型を選択 → 数式に「LastModifiedDate」

日付型である最終更新日(LastModifiedDate)を日付/時間型で出力するだけでOK。
日付型でありながら時間まで持っているからできる芸当。
作成日のときは「CreatedDate」を指定。

リードのカスタム項目(最終更新日時)

時間・分・秒に加え曜日も表示する

曜日まで含めると日時/時間型では無理なんで、
テキスト型で表現する必要がある。

データ型は「数式」を選択 → 「テキスト」型を選択 → 数式に下記を入力
LEFT( TEXT( LastModifiedDate + 0.375 ), 10 )
& "(" &
IF( 
    ISNULL( LastModifiedDate ), 
    "", 
    CASE( MOD( DATEVALUE(LastModifiedDate + 0.375) - DATE(1900, 1, 7), 7 ), 
      0, "日",
      1, "月",
      2, "火",
      3, "水",
      4, "木",
      5, "金", 
      "土"
    )
) 
& ") " &
MID( TEXT( LastModifiedDate + 0.375 ), 11, 9 )

リードのカスタム項目(最終更新日時_曜日あり)

テキスト型で日時を出力するときに気を付けるのがタイムゾーン。

日付値および日付/時間値は GMT で格納されます。レコードを保存するときは、項目値がユーザのタイムゾーンから GMT に調整され、その後レコード詳細ページやレポートで表示される時点で閲覧者のタイムゾーンに戻されます。日付に変換することで問題が生じることはありません。日付/時間から日付に変換しても日付値は同じであるためです。

ただし、日付/時間の項目や値を処理する場合、変換は常にユーザのタイムゾーンではなく、GMT で行われます。標準の日付/時間項目から別の標準の日付/時間を減算する場合は、どちらの項目も同じタイムゾーンのため問題は生じません。他方、計算するいずれかの値が、テキストまたは日付値から日付/時間値に変換されたものである場合には、結果が異なります。
数式での日付値および日付/時間値の使用の概要

『日付/時間およびタイムゾーンの留意点』に書いてあるが、
Salesforceで保存される日付データはすべてGMTで格納される。
それを表示させるユーザのタイムゾーンによって、
表示させる時間を変えているらしい。

数式で計算するときもGMTで処理されるようなので、
テキストに加工する前に日本時間に合わせないといけない。

Date_Time_c – DATETIMEVALUE( “2013-08-01 12:00:00″ )
この場合、DATETIMEVALUE( “2013–08–01 12:00:00” ) は 2013–08–01 12:00:00Z で、0.79167 (19 時間) という結果が返されます。
数式での日付値および日付/時間値の使用の概要

1時間以下は小数点で表すようなので、
日本時間に調整する「+9時間」は「+0.375」で計算できる。

あとはLEFTやMIDを使って必要な時間部分をうまいこと切り出して足すだけ。
曜日は公式にあるサンプルから取ってきたものを流用した。

Pocket


So, what do you think ?