2021/06/7

SalesforceのDATE()関数とは?日付値変換の書式サンプルや注意点をご紹介

 
  

Salesforceの日付値変換、DATE()関数とは

DATE()関数は、年、月、日を指定してDate値を返す、つまり、日、月、年を目的の日付値に変換するのに使用します。 たとえば、Salesforce上にて下記のように指定の日付での日付値を求めたり、一定の日程で予定されている日付の日付値を求めるのに使用します。 ①2021年12月31日の日付値を求める
DATE( 2021, 12, 31 )
②現在の年の今日から3か月後の最初の日の日付値を求める
DATE( YEAR( TODAY() ), MONTH( TODAY() ) + 3, 1) 
ただし、どちらの場合であっても、入力されたY/M/D値が無効な日付になる場合、DATE()関数はエラーを返すため、エラーチェックが必須となります。

Salesforce上におけるDATE()関数等により年月日を求める

Salesforce上にて、日付に特定の日数を追加して求める場合は、その数値を日付に直接追加します。たとえば、日付に5日を追加するには、数式はdate+5です。 しかし、現在、Salesforceでも使用されているグレゴリオ暦は月により日数が異なり、うるう年が発生することにより2月の日数も一定ではありません。 よって、月毎や月単位での追加が求められる場合や月をまたいで求められる日付換算等をDATE()関数等を用いて行う場合、その日付が有効である値であるかの検証(エラーチェック)が必須となります。 基本となるエラーチェック、また業務に活用できそうな数値を求める数式のサンプルをいくつか紹介します。

うるう日2月29日のエラーチェック・サンプル(うるう年かどうかのチェック)

月日に2月29日(うるう日)を指定する際に、該当年がうるう年かどうかをチェックし、該当しない場合は3月1日を返すサンプルです。 グレゴリオ暦における、うるう年は基本的に「400で割り切れる年」、もしくは「4で割り切れてかつ100で割り切れない年」となります。
IF(
  AND(
    MONTH( date ) = 2,
    DAY( date ) = 29,
    NOT(
      OR(
        MOD( YEAR( date ), 400 ) = 0,
        AND(
          MOD( YEAR( date ), 4 ) = 0,
          MOD( YEAR( date ), 100 ) != 0
        )
      )
    )
  ),
  DATE( YEAR( date ) + num_years, 3, 1),
  DATE( YEAR( date ) + num_years, MONTH( date ), DAY( date ) )
)

31日ではない月をまたぐ際の日数追加のエラーチェック・サンプル

この数式の例では、特定の日付に2か月を追加します。その際の以下のとおり、検証(エラーチェック)を行います。 ・追加された後の日付が2月で、日が28より大きい場合、3月1日を返します。(うるう年の判断はしていないので、うるう年の検証も必要な場合は別途、処理の追加が必須となります) ・追加された後の日付が4月、6月、9月、または11月で、日が30より大きい場合、翌月の最初の日を返します。 それ以外の場合は、将来の月の正しい日付を返します。
DATE(
  YEAR( date ) + FLOOR( ( MONTH ( date ) + 2 - 1 ) / 12 ),
  MOD( MONTH ( date ) + 2 - 1 +
    IF( DAY ( date ) > CASE( MOD( MONTH( date ) + 2 - 1, 12 ) + 1,
      2, 28,
      4, 30,
      6, 30,
      9, 30,
      11, 30,
      31 ), 1, 0 ), 12 ) + 1,
    IF( DAY( date ) > CASE( MOD( MONTH( date ) + 2 - 1, 12 ) + 1,
      2, 28,
      4, 30,
      6, 30,
      9, 30,
      11, 30,
      31 ),
    1, DAY( date )
  )
)

日付が年度の何週目かを確認する数式サンプル

現在何週目かを確認するには、現在の年度の経過日数を算出して7で割ります。 IF()ステートメントは、この数式で返された週数が52を超えていないことを確認します。対象の日付がその年の12月31日の場合は、52週を超えて1月の第1週になる場合でも、この式では52が返されます。
IF(
  CEILING( ( date - DATE( YEAR( date ), 1, 1) + 1) / 7) > 52,
  52,
  CEILING( ( date - DATE( YEAR( date ), 1, 1) + 1) / 7)
)

月の最終日を確認する数式サンプル

月の最終日を確認する簡単な方法は、翌月の最初の日を調べ、そこから1日差し引くことです。
IF(
  MONTH( date ) = 12,
  DATE( YEAR( date ), 12, 31 ),
  DATE( YEAR( date ), MONTH ( date ) + 1, 1 ) - 1
)

特定の曜日の次回の日付を確認する数式サンプル

指定した日付以降に特定の曜日となる直近の日付を確認するには、dateとday_of_weekの差の日数を取得することで可能です。 この日数は0~6の数値で示され、0が日曜日、6が土曜日を表し、この差を現在の日付に加えれば、day_of_weekの日付を確認できます。 この数式の IF()ステートメントは、day_of_weekがdate値の曜日より前の場合に(date が木曜日で、day_of_weekが月曜日の場合)、日数の差に7を加算します。
date + ( day_of_week - MOD( date - DATE( 1900, 1, 7 ), 7 ) )
+
IF(
  MOD( date - DATE( 1900, 1, 7 ), 7 ) >= day_of_week,
  7,
  0
)

Salesforceにおける、DATE()関数以外の主な日付と時刻の関数

DATE()関数以外にも日付値を求めたり、日時換算する際に便利な関数があります。主なものを下記に紹介します。 場合によって、使い分けすることで詳細な値、フォーマット別等の値を入手することが可能です。

日付/時間と日付間の変換

Dateデータ型とDate/Timeデータ型は代替不能なため同時に処理換算できません。よって日付値と日付/時間値を含む演算を行う場合は、値を変換してデータ型を揃える必要があります。 一定の関数(YEAR()、MONTH()、DAY() など)は日付値でしか処理できないため、最初に日付/時間値を変換する必要があります。 DATEVALUE(date/time)関数を使用すると、日付/時間の日付値のみが返されます。 以下のように、日付/時間またはテキスト値を取り、日付を返します。
DATEVALUE("2015-03-17")

日付/時刻と時刻の間の変換

TIMEVALUE()関数は、24時間制を使用して、Timeデータ型の値を「HH:MM:SS.MS」(時:分:秒.ミリ秒)形式で返します。 数値H/M/S/MS値とHOUR()、MINUTE()、SECONDS()、およびMILLISECONDS()機能が有効なパラメータです。
TIMEVALUE("17:30:00.000")

月単位での日時追加

ADDMONTHS() 関数は、月単位での追加日時換算を行うときに使用します。また、算術演算を行うときに月の最終日を考慮します。 つまり、月の最終日が30日である場合、この日付に1か月を加算すると、結果は翌月の最終日になります。この結果の値が31日である場合もあります。同様に、うるう年の2月28日に1か月を加算すると3月31日になります。
ADDMONTHS(Date__c, Num_Years__c * 12)

現在の日付の取得

TODAY()関数は、現在の日付を日付データ型として返します。
TODAY()
たとえば、今日の3日後の日付を返す数式を作成すると以下となります。
TODAY() + 3

SalesforceにおけるDATE()関数をはじめとした日時関連の関数を活用しよう!

今回は、Salesforceの日時管理に必要となる日付値処理の基本として、DATE()関数の使い方およびエラーチェックの必要性、サンプルについて紹介しました。 カレンダー上や予定での日付や時刻は、業務においては重要な要素となります。また、様々なデータをまとめる上でも日時の項目は必須となります。それはもちろんSalesforceでも同じことです。 Salesforce上にて必要な日付値を適切に求められるように、DATE()関数をはじめとした日時関連の関数およびそのエラーチェックを活用できるようにしておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】