指定月数後の日付を計算
kintoneでは、指定月数後の日付を求める関数がありません(2021年10月現在)。
下記の手順で、指定月数後の日付をkintoneの標準機能で求めることができます。
ただし、ここでは計算フィールドで変換しているため、リマインダー通知の基準日など、日付・日時フィールドであることが必要な機能に利用することはできません。日付・日時フィールドに計算結果を入力するには、JavaScriptカスタマイズやプラグインなどが必要です。
例1
日付 : 2021年10月9日
月数 : 24
↓
月数後の日付 : 2023年10月9日
例2
ただし、求められた日付が月末日を超えている場合は、翌月の1日とします。
日付 : 2021年1月31日
月数 : 1
↓
月数後の日付 : 2021年3月1日
参考
考え方
1.日付を年と月と日に分ける
計算しやすくするために、DATE_FORMAT関数で年、月、日を求めます。
・日付の年 : DATE_FORMAT(日付,"yyyy","Etc/GMT")
・日付の月 : DATE_FORMAT(日付,"M","Etc/GMT")
・日 : DATE_FORMAT(日付,"d","Etc/GMT")
2.年と月を加算
入力された月数を年数と分けて、入力された年と月に加えます。
・年数 : ROUNDDOWN((日付の月-1+月数)/12)
・年 : 日付の年+年数
・月 : 日付の月+月数-年数*12
3.年をUNIX日付に変換
kintoneでは1970年1月1日からの秒数で日付を扱う(UNIX日付)ため、1970との年数の差を秒単位で足します。4年に1度のうるう年も考慮します。1900年以降なら下記の計算で対応できます。
その年 : ((年-1970)365+ROUNDDOWN((年-1968)/4))246060
4.月をUNIX日付に変換
上記で求めた年に、月を秒単位で足します。1月の場合は、足す必要がないため、月から1を引きます。
その月 : その年+(月-1)31246060
5.日をUNIX日付に変換
その月に日を加えて結果日付を求めます。
その月の日 : DATE_FORMAT(その月,"d","Etc/GMT")
その月の1日 : その月-(その月の日-1)246060
結果日付 : その月の1日+(日-1)246060
6.月末の扱い
結果日付が月末を超えている場合に翌月の1日とします。
結果日 : DATE_FORMAT(結果日付,"d","Etc/GMT")
月数後の日付 : IF(日>結果日,結果日付-(結果日-1)2460*60,結果日付)
kintoneのアプリ
※フィールドコードはフィールド名と同じにします。
完成イメージ
入力
・日付[日付フィールド]
・月数[数値フィールド]
計算用
・日付の年 [計算フィールド]
計算式 : DATE_FORMAT(日付,"yyyy","Etc/GMT")
表示形式 : 数値
・日付の月 [計算フィールド]
計算式 : DATE_FORMAT(日付,"M","Etc/GMT")
表示形式 : 数値
・日 [計算フィールド]
計算式 : DATE_FORMAT(日付,"d","Etc/GMT")
表示形式 : 数値
・年数 [計算フィールド]
計算式 : ROUNDDOWN((日付の月-1+月数)/12)
表示形式 : 数値
・年 [計算フィールド]
計算式 : 日付の年+年数
表示形式 : 数値
・月 [計算フィールド]
計算式 : 日付の月+月数-年数*12
表示形式 : 数値
・その年[計算フィールド]
計算式 : ((年-1970)*365+ROUNDDOWN((年-1968)/4))*24*60*60
表示形式 : 日付
・その月[計算フィールド]
計算式 : その年+(月-1)*31*24*60*60
表示形式 : 日付
・その月の日 [計算フィールド]
計算式 : DATE_FORMAT(その月,"d","Etc/GMT")
表示形式 : 数値
・その月の1日 [計算フィールド]
計算式 : その月-(その月の日-1)*24*60*60
表示形式 : 日付
・結果日付 [計算フィールド]
計算式 : その月の1日+(日-1)*24*60*60
表示形式 : 日付
・結果日 [計算フィールド]
計算式 : DATE_FORMAT(結果日付,"d","Etc/GMT")
表示形式 : 数値
指定月数後の日付
・月数後の日付 [計算フィールド]
計算式 : IF(日>結果日,結果日付-(結果日-1)*24*60*60,結果日付)
表示形式 : 日付