Salesforce の数式などで「時間型 (Time)」を扱う場面は少なくありません。
例えば、ある処理を実行した「現在の時刻」を取得したり、特定の時刻との差分を計算したり、あるいは秒やミリ秒単位で時間を加減算するなど、多くのケースで時間操作が必要になります。
本記事では、Salesforceで時間を扱う際に知っておくと便利な関数やテクニックを体系的にまとめています。
具体的には、以下のような内容をカバーしています。
これらを理解しておくことで、より柔軟かつ正確な時間計算やロジックの構築が可能になります。
現在の時間を取得する
現在の時間は TIMENOW 関数で取得できます。
TIMENOW()
時間の加算/減算
時間型の加算/減算はミリ秒単位です。
h 時間後、m 分後、s 秒後、ms ミリ秒後の時間を取得したい場合は単位に注意して加算します。
時間型 + ( ( h * 60 + m ) * 60 + s ) * 1000 + ms
時間から時分秒ミリ秒を計算する
時間から時分秒ミリ秒を計算するには、HOUR 関数、MINUTE 関数、SECOND 関数、MILLISECOND 関数を使います。
時を取得する場合は下記の形になります。
HOUR( 時間型 )
分を取得する場合は下記の形になります。
MINUTE( 時間型 )
秒を取得する場合は下記の形になります。
SECOND( 時間型 )
ミリ秒を取得する場合は下記の形になります。
MILLISECOND( 時間型 )
時分秒ミリ秒から時間を計算する
時分秒ミリ秒から時間を取得するには TIMEVALUE 関数を使います。
TIMEVALUE 関数は時分秒ミリ秒を文字列として渡します。
TIMEVALUE( "HH:MM:SS.SSS" )
時分秒ミリ秒が数値として得られている場合は TEXT 関数で文字列にする必要があります。
TIMEVALUE( TEXT( HH ) + ":" + TEXT( MM ) + ":" + TEXT( SS ) + "." + TEXT( SSS ) )
ミリ秒から時間を計算する
ミリ秒から時間を取得するには時分秒ミリ秒を計算した上で TIMEVALUE 関数を使います。
TIMEVALUE(
TEXT( FLOOR( ms / 60 / 60 / 1000 ) )
+ ":" +
TEXT( FLOOR( ms / 60 / 1000 ) - FLOOR( ms / 60 / 60 / 1000 ) * 60 )
+ ":" +
TEXT( FLOOR( ms / 1000 ) - FLOOR( ms / 60 / 1000 ) * 60 )
+ "." +
TEXT( ms - FLOOR( ms / 1000 ) * 1000 )
)
これは、FORMATDURATION 関数を使うと簡潔に表現できます。
FORMATDURATION 関数は引数に秒単位を必要とする点と戻値が `HH:MM:SS` となることに注意が必要です。
TIMEVALUE( FORMATDURATION( FLOOR( ms / 1000 ) ) + "." + TEXT( ms - FLOOR( ms / 1000 ) * 1000 ) )
時間の差分を計算する
時間の差分はミリ秒単位で計算されるため、単位の調整が必要な場合は係数をかける必要があります。
ミリ秒単位で取得する場合は下記のような形になります。
( 時間型 - 時間型 )
秒単位で取得する場合は下記のような形になります。
( 時間型 - 時間型 ) / 1000
分単位で取得する場合は下記のような形になります。
( 時間型 - 時間型 ) / 60 / 1000
時間単位で取得する場合は下記のような形になります。
( 時間型 - 時間型 ) / 60 / 60 / 1000
時間の差分を時間型で取得する場合は、TIMEVALUE 関数を使う形で記述します。
TIMEVALUE(
TEXT( FLOOR( ( 時間型 - 時間型 ) / 60 / 60 / 1000 ) )
+ ":" +
TEXT( FLOOR( ( 時間型 - 時間型 ) / 60 / 1000 ) - FLOOR( ( 時間型 - 時間型 ) / 60 / 60 / 1000 ) * 60 )
+ ":" +
TEXT( FLOOR( ( 時間型 - 時間型 ) / 1000 ) - FLOOR( ( 時間型 - 時間型 ) / 60 / 1000 ) * 60 )
+ "." +
TEXT( ( 時間型 - 時間型 ) - FLOOR( ( 時間型 - 時間型 ) / 1000 ) * 1000 )
)
これもミリ秒から時間を計算することと同様なため、FORMATDURATION 関数を使うことで簡潔に書くことができます。
TIMEVALUE( FORMATDURATION( FLOOR( ( 時間型 - 時間型 ) / 1000 ) ) + "." + TEXT( ( 時間型 - 時間型 ) - FLOOR( ( 時間型 - 時間型 ) / 1000 ) * 1000 ) )
寄稿者: 中澤大樹 (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
005115576

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.