Salesforceの日付型・日付/時間型・時間型とテキスト型の変換はクセが強いと言いますか、数式をたまにしか使わないと忘れてしまわれた方も多いのではないでしょうか?
この記事ではSalesforceの数式で日付型・日付/時間型・時間型とテキスト型の変換とフォーマットについてまとめました。
数式は数式項目、入力規則、承認プロセス、フローなどで使用できます。
Salesforceの日付型と日付/時間型の注意点
Salesforceの日付型と日付/時間型はGMT(グリニッジ標準時 )で保存されるため、テキスト変換する時には特にタイムゾーンを考慮するようお気をつけください。
数式でユーザのタイムゾーンを判断する方法はありません。ユーザ全員が同じタイムゾーンである場合は数式内でタイムゾーンを計算するようにしても良いでしょう。タイムゾーンがバラバラな場合はApexを使いましょう。
ちなみに日本標準時は協定世界時(UTC)を9時間進めた時刻(UTC+9)です。GMTにうるう年を調整したものがUTCです。なのでGMTにはうるう年が考慮されていません。この記事ではGMT+9を日本標準時として書いてます。
テキストへ変換 TEXT関数
日付→テキスト変換
TEXT( TODAY() )
「YYYY-MM-DD」の形式で返ってきます。
内部のデータでは時間が「12:00:00」になっているので、タイムゾーンが12時間以上ある国では1日前後のずれが発生するのでご注意を!
日付/時間→テキスト変換
TEXT( NOW() )
「YYYY-MM-DD HH:MM:SS」の形式で、末尾に GMT を表す「Z」が付記されます。
実際の値は「2023–04–01 00:00:00Z」このようになります。
日付/時間→テキスト変換(日本標準時)
SUBSTITUTE(TEXT( ( NOW() + 9/24) ), 'Z', '')
日本のタイムゾーンは+9時間です。
1日を24時間で割って、9時間掛けてあげれば良いわけです。
1/24*9 を加算すれば日本のタイムゾーン変換できます。
さらに最後に「Z」の文字がついてしまうため、空文字に置換してあげます。
時間→テキスト変換
TEXT( TIMENOW() )
「HH:MM:SS.MS」の形式で返ってきます。
実際の値は「00:00:00.000」このようになります。
時間→テキスト変換(日本標準時)
TEXT( TIMENOW() + 32400000 )
日本のタイムゾーンは+9時間です。
9時間をミリ秒の単位にして加算すれば良いです。
9*60*60*1,000=3,2400,000を足してあげます。
日付・日付/時間・時間に変換
テキスト→日付変換 DATEVALUE関数
DATEVALUE( "2023-04-01" )
テキスト→日付/時間変換 DATETIMEVALUE関数
DATETIMEVALUE("2023-04-01 12:00:00")
テキスト→時間変換 TIMEVALUE関数
TIMEVALUE("17:00:00.125")
おまけ
日付/時間→日付変換
DATEVALUE( NOW() )
数値→日付変換
DATE( 2023, 4, 1 )
YYYY-M-Dフォーマット(先頭ゼロなし)
TEXT(YEAR(TODAY())) & "-" & TEXT(MONTH(TODAY())) & "-" & TEXT(DAY(TODAY()))
「2024-4-1」のようになります。
YYYY/MM/DDフォーマット
SUBSTITUTE(TEXT(TODAY()), '-', '/')
YEAR関数・MONTH関数・DAY関数を使っても良いのですが、ゼロ埋めしないといけないので、置換した方が簡単です。
LEFT関数・MID関数・RIGHT関数を使ったパターンも一応置いておきます。
LEFT(TEXT(TODAY(),4) + "/" + MID(TEXT(TODAY(),6,2) + "/" + RIGHT(TEXT(TODAY(),2)
年月のみ(YYYY/MM)
LEFT(TEXT(TODAY(),4) + "/" + MID(TEXT(TODAY(),6,2)
結合する文字列”/”を他のものに変えても使い勝手が良さそうです。
YYYYMMDDフォーマット
SUBSTITUTE(TEXT(TODAY()), '-', '')
YYYY年MM月DD日
YYYYMMDDHHmmss(日本標準時)
SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(TEXT( ( NOW() + 9/24) ), 'Z', '') , '-' ,'') , ':' ,'') , ' ' ,'')
ファイル名によくつける書式ですね。
必要ない記号や空白を置換するようにすればMID関数やそれぞれを数値型で取るよりも短く書けます。
月末日(YYYY-MM-DD)
TEXT( DATE( YEAR( ADDMONTHS( DATE__C , 1 ) ), MONTH( ADDMONTHS( DATE__C , 1 ) ), 1 ) - 1 )
参考
Using Date, Date/Time, and Time Values in Formulas | Salesforce Help