時間フィールドの計算


[Answersで回答する時に使う情報のまとめに戻る](https://qiita.com/Keiji_otsubo/items/9e6e0e946826133eddc7)


# 日本時間への変換

+ [[フロー] トリガした日時秒を取得してカスタム項目へ転記](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Urw3L)

```
TEXT(NOW() +9/24)
```

# Date Time型

変換するには以下のフォーマットが必要です。

日付値の例
DATETIMEVALUE("**2005-11-15 17:00:00**") は、日時値として November 15, 2005 5:00 PM GMT を返します。

ただしGMTなので日本時間にする時は　+9/24

X20221116date__c　：　日付型のフィールド
X20221116pick__c　：　選択リストのフィールド

```
IF( NOT(ISBLANK( X20221116date__c )) && NOT(ISBLANK(TEXT( X20221116pick__c ))) ,
DATETIMEVALUE( TEXT( X20221116date__c ) & " " & TEXT( X20221116pick__c) & ":00" ) +9/24
,NULL)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d16e6fd9-b5bb-6e14-6816-7922904aa475.png)

+ [datatime型に変換する数式について教えていただきたいです](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000LFwVFSA1)


# Time型

DateやDateTimeでは 2/24というように24時間で割った値を使って時間を計算できます。

Time型では単純に + 2 とすれば2時間追加されると思ってましたが違う？

何？

もしかしてと思って

2 * 60 * 60　

秒が7秒増えた。はぁ？　ミリ秒か？

2 * 60 * 60 * 1000

正解です。　どうもミリ秒みたい。

```
IF( NOT(ISBLANK( Appointment_Time__c )),TIMEVALUE(Appointment_Time__c + ":00.000") + 2*60* 60 * 1000 , Null)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/39a88a5a-c2cd-e408-fd87-63c6a35cf3fe.png)


[Converting TEXT field (managed package) into TIME format and adding 2 hours](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000FTnZ3)

# TIMEVALUE("24:00:00.000")の結果がおかしい

+ [Date/Time Formula: Set Day and Time](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JghXx)

TIMEVALUE("24:00:00.000")　はブランクが返ってきます

TIMEVALUE("0:00:00.000") --> 12:00:00 AM

# 時間型項目の差異を秒数まで表示

[数式 (テキスト)で2つの日付/時間型項目の差異を秒数まで表示したい場合](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000IQNILSA5)

```
IF( 
  datetime_1 - datetime_2 > 0 , 
  TEXT( FLOOR( datetime_1 - datetime_2 ) ) & " 日 " 
  & TEXT( FLOOR( ( ( datetime_1 - datetime_2 ) - FLOOR( datetime_1 - datetime_2 ) ) * 24 ) ) & " 時間 " 
  & TEXT( FLOOR( ( ( datetime_1 - datetime_2 ) * 24 - FLOOR( ( datetime_1 - datetime_2 ) * 24 ) ) * 60 ) ) & " 分 " 
  & TEXT( FLOOR( ( ( datetime_1 - datetime_2 ) * 24 * 60 - FLOOR( ( datetime_1 - datetime_2 ) * 24 * 60 ) ) * 60 ) ) & " 秒の差" , 
  ""
)
```

+ [How to Correctly Display Duration in Hours and Minutes in Salesforce Formula](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J7U1V)

```
IF(
    (EndDate__c - StartDate__c) * 24 < 4,
    TEXT(FLOOR((EndDate__c - StartDate__c) * 24) + 
         FLOOR(MOD((EndDate__c - StartDate__c) * 1440, 60) / 60)) & " hours " &
    TEXT(MOD(FLOOR((EndDate__c - StartDate__c) * 1440), 60)) & " minutes",
    IF(
        (EndDate__c - StartDate__c) * 24 < 8,
        TEXT(FLOOR(((EndDate__c - StartDate__c) - (30/1440)) * 24) + 
             FLOOR(MOD(((EndDate__c - StartDate__c) - (30/1440)) * 1440, 60) / 60)) & " hours " &
        TEXT(MOD(FLOOR(((EndDate__c - StartDate__c) - (30/1440)) * 1440), 60)) & " minutes",
        TEXT(FLOOR(((EndDate__c - StartDate__c) - (1/24)) * 24) + 
             FLOOR(MOD(((EndDate__c - StartDate__c) - (1/24)) * 1440, 60) / 60)) & " hours " &
        TEXT(MOD(FLOOR(((EndDate__c - StartDate__c) - (1/24)) * 1440), 60)) & " minutes"
    )
)
```



# 分を60進数でなくて10進数で表示したい

単に60で割ればよかったですね。

[Convert Time field to Number of Hours](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000G6Xwy)

# 秒で保存されているフィールドを HH:MM:SSに変換する

[Convert seconds to HH:MM:SS with Formula Text Field - HELP!](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000K0EO1)

```
IF(ISBLANK(Seconds__c),null,
LPAD(TEXT( FLOOR(Seconds__c /60 / 60)),2,"0") + ":" +
LPAD(TEXT(FLOOR( (Seconds__c)/60) - FLOOR(Seconds__c /60 / 60)*60),2,"0") + ":" + 
LPAD(TEXT( FLOOR(MOD((Seconds__c)/60,1)*60)),2,"0")
)
```

分のところは単純に　FLOOR( (Seconds__c)/60) で処理すると　65分などになるので、
時間の結果を引き算する


# フローではTime型は使えない？

+ [Flow 内の Time Value を更新するには Datetime 値が必要で、日付ビットが削除されるようです。 ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007akXbZ)