Salesforce 数式 うるう年のロジック


SFDCの数式:うるう年の計算ロジック

【使用方法】ある日付を基準に、n年後の日付を自動算出する時に使用。

ex) 契約開始日(ContractDate)を入力したら、自動的にn年後(addYear)の契約更新日を算出する。
うるう年の2月29日が入力されたとき、n年後が平年である場合は3月1日を算出する。

変数 データ型 内容
ContractDate 日付型 基準日の項目
addYear 数値型 基準日からプラスする年数
IF(
  AND(
    MONTH(ContractDate) = 2,
    DAY(ContractDate) = 29,
    OR( 
      MOD( YEAR(ContractDate), 400 ) = 0, 
      AND( 
        MOD( YEAR(ContractDate), 4 ) = 0,
        MOD( YEAR(ContractDate), 100 ) != 0
      )
    )
  ),
  DATE( YEAR(ContractDate) + addYear,3,1),
  DATE( YEAR(ContractDate) + addYear, MONTH(ContractDate), DAY(ContractDate))
)
【memo】

うるう年のルール
①. 4の倍数になる年=うるう年
②. 100の倍数になる年で400で割り切れない年=うるう年でない

つまり、
「400で割り切れる年」
または
「4で割り切れる年 かつ 100で割り切れない年」
は、うるう年になります。

うるう年を考慮せず、日付算出ロジック
DATE( YEAR(ContractDate) + addYear, MONTH(ContractDate), DAY(ContractDate)
だけを数式に書くと、
入力した日付がうるう年であり、算出した日付がうるう年でない場合、存在しない日付となり、
「数式なのに日付が出力されない!」となりますのでご注意。(⌒∇⌒)



以上



追記:
更新日とかって大体、契約日-1 なんですよね。。
その場合はIF文の分岐結果部分を以下のように書き換えるだけ。

  DATE( YEAR(ContractDate) + addYear,3,1) -1,
  DATE( YEAR(ContractDate) + addYear, MONTH(ContractDate), DAY(ContractDate)) -1