NOW 関数による現在日時の取得から、ADDMONTHS・DATEVALUE・TIMEVALUE などの関数を使った日付・時間の演算、さらに日時の差分計算まで、よく使うパターンを体系的に解説します。
日付や時間の計算ロジックを理解しておくことで、動的な条件分岐やスケジュール処理の精度を高めることができます。
現在の日時を取得する
現在の日時は NOW 関数で取得できます。
NOW()
日時の加算/減算
日時型は整数部が日付で小数部が時間を表しています。
d 日後、h 時間後、m 分後、s 秒後、ms ミリ秒後の日時を取得したい場合は単位に注意して加算します。
日時型 + d + ( h + ( m + ( s + ms / 1000 ) / 60 ) / 60 ) / 24
月数単位の加算や減算は ADDMONTHS 関数を利用します。
ADDMONTHS( 日時型 , n )
年数単位の加算や減算は月数単位の加算や減算の 12 倍になります。
ADDMONTHS( 日時型 , n * 12 )
日時から日付を取得する
日時型から日付部分を取得する場合は DATEVALUE 関数を使います。
DATEVALUE( 日時型 )
日時から時間を取得する
日時型から時間部分を取得する場合は TIMEVALUE 関数を使います。
TIMEVALUE( 日時型 )
年月日と時分秒ミリ秒から日時を計算する
年月日と時分秒から日時を取得するには、DATETIMEVALUE 関数を使います。
DATETIMEVALUE( "YYYY-MM-DD HH:MM:SS" )
DATETIMEVALUE 関数はミリ秒の情報を付加できないため、ミリ秒の値を加える必要があります。
DATETIMEVALUE( "YYYY-MM-DD HH:MM:SS" ) + MS / 24 / 60 / 60 / 1000
日付と時間から日時を計算する
日付と時間が存在する場合は、年月日や時分秒ミリ秒を抽出するよりも、時間からミリ秒を欠落させて日時を計算する方が簡単になります。
DATETIMEVALUE( TEXT( 日付型 ) + " " + LEFT( TEXT( 時間型 ) , 8 ) ) + MILLISECOND( 時間型 ) / 24 / 60 / 60 / 1000
また、日付型のみを DATETIMEVALUE 関数に渡すと `日付T00:00:00.000Z` になることを利用して、時間を別途加える方法もあります。
DATETIMEVALUE( 日付型 ) + ( HOUR( 時間型 ) + ( MINUTE( 時間型 ) + ( SECOND( 時間型 ) + MILLISECOND( 時間型 ) / 1000 ) / 60 ) / 60 ) / 24
日時の差分を計算する
日時の差分は整数部が日付で小数部が時間で計算されるため、単位の調整が必要な場合は係数をかける必要があります。
日単位で取得する場合は下記のような形になります。
( 日時型 - 日時型 )
時間単位で取得する場合は下記のような形になります。
( 日時型 - 日時型 ) * 24
分単位で取得する場合は下記のような形になります。
( 日時型 - 日時型 ) * 24 * 60
秒単位で取得する場合は下記のような形になります。
( 日時型 - 日時型 ) * 24 * 60 * 60
ミリ秒単位で取得する場合は下記のような形になります。
( 日時型 - 日時型 ) * 24 * 60 * 60 * 1000
差分を 24 時間未満の時間型で取得する場合は、TIMEVALUE 関数を使う形で記述します。
TIMEVALUE(
TEXT( FLOOR( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) / 60 / 60 / 1000 ) )
+ ":" +
TEXT( FLOOR( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) / 60 / 1000 ) - FLOOR( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) / 60 / 60 / 1000 ) * 60 )
+ ":" +
TEXT( FLOOR( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) / 1000 ) - FLOOR( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) / 60 / 1000 ) * 60 )
+ "." +
TEXT( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) - FLOOR( ( TIMEVALUE( 日時型 ) - TIMEVALUE( 日時型 ) ) / 1000 ) * 1000 )
)
差分を日数を含めた形で文字列として取得する場合は、FORMATDURATION 関数を使います。
FORMATDURATION( 日時型 , 日時型 )
寄稿者: 中澤大樹 (Nakazawa Hiroki) | Trailblazer Community Forum Ambassador
現在、サークレイス株式会社にて、開発者として Apex や LWC を中心とした Salesforce の機能開発および保守業務を担当。
また Trailblazer Community の質問回答の他に複数のコミュニティの運営に携わっている。
投稿内容は、投稿したユーザーの意見のみを反映し、Salesforce の意見ではありません。ユーザーが Salesforce と関連しているかどうかに関わらず、投稿内容には第三者によって提供された製品、サービス、情報、データ、コンテンツその他の資料(以下「第三者資料」といいます)が含まれるか、またはそれらを構成する可能性があります。 Salesforce は、第三者資料(その正確性、有効性、適時性、完全性、信頼性、整合性、品質、合法性、有用性、安全性、または適用される知的財産権を含む)を管理、承認、または保証するものではなく、これらについて一切の責任を負いません。メッセージボードまたはフォーラムを通じて投稿された質問への回答として提供された投稿、または Salesforce またはプログラムに関する質問を含む質問への回答を主張する投稿は、一般的な情報提供を目的として提供されており、特定の質問への回答として依拠すべきものではありません(回答が「ベスト」回答としてマークされている場合や類似の資格が付与されている場合でも)。特定の質問への回答については、必ず Salesforce サポートにお問い合わせください。Salesforce は投稿内容について一切の管理権限を有せず、第三者による投稿内容の利用または誤用(配布を含む)について一切の責任を負いません。
ご質問がある場合は、当社の Trailblazer コミュニティの知見を活用してください:
https://trailhead.salesforce.com/trailblazer-community/feed
005228019

We use three kinds of cookies on our websites: required, functional, and advertising. You can choose whether functional and advertising cookies apply. Click on the different cookie categories to find out more about each category and to change the default settings.
Privacy Statement
Required cookies are necessary for basic website functionality. Some examples include: session cookies needed to transmit the website, authentication cookies, and security cookies.
Functional cookies enhance functions, performance, and services on the website. Some examples include: cookies used to analyze site traffic, cookies used for market research, and cookies used to display advertising that is not directed to a particular individual.
Advertising cookies track activity across websites in order to understand a viewer’s interests, and direct them specific marketing. Some examples include: cookies used for remarketing, or interest-based advertising.