0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

指定月数後の日付をkintoneの標準機能で計算する

Last updated at Posted at 2021-10-09

指定月数後の日付を計算

kintoneでは、指定月数後の日付を求める関数がありません(2021年10月現在)。
下記の手順で、指定月数後の日付をkintoneの標準機能で求めることができます。

ただし、ここでは計算フィールドで変換しているため、リマインダー通知の基準日など、日付・日時フィールドであることが必要な機能に利用することはできません。日付・日時フィールドに計算結果を入力するには、JavaScriptカスタマイズやプラグインなどが必要です。

例1

日付 : 2021年10月9日
月数 : 24

月数後の日付 : 2023年10月9日

例2

ただし、求められた日付が月末日を超えている場合は、翌月の1日とします。
日付 : 2021年1月31日
月数 : 1

月数後の日付 : 2021年3月1日

参考

年と月と日をkintoneの標準機能で日付に変換する

考え方

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)2460
60

6.月末の扱い

結果日付が月末を超えている場合に翌月の1日とします。
結果日 : DATE_FORMAT(結果日付,"d","Etc/GMT")
月数後の日付 : IF(日>結果日,結果日付-(結果日-1)2460*60,結果日付)

kintoneのアプリ

※フィールドコードはフィールド名と同じにします。

完成イメージ

指定月数後の日付を計算.gif

入力

・日付[日付フィールド]
・月数[数値フィールド]

計算用

・日付の年 [計算フィールド]
 計算式 : 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,結果日付)
 表示形式 : 日付

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?