見出し画像

kintoneで年齢・経過年数を計算する


ゴールと戦略

エクセルなら、DATEDIF関数できるのになぁと

ゴール:M歳Nヶ月と表示する

日付フィールド(生年月日):1964-02-11を、
日付フィールド(基準日):2023-01-01で、
文字列_1行(年齢):58歳11ヶ月と表示する

戦略:年を100の位、月を10の位と捉えて、筆算するイメージ

年は年で差を求め、月は月で差を求める。
月の差が負(引かれる月が、引く月より小さい)なら、
年から1年(12ヶ月)を借りてきて、引き算する。

*2024.0517追記:→追加参照
日の差が負(引かれる日が、引く人よりも小さい)なら、
月から1ヶ月(28~31日)を借りてきて、引き算する
その結果を踏まえて、月の差が負(引かれる月が、引く月より小さい)なら、年から1年(12ヶ月)を借りてきて、引き算する。

使用したモノ


フィールド:日付、計算、文字列(1行)
関数:DATE_FORMAT、IF

年と月の計算

生年月日
計算フィールド(生年):DATE_FORMAT(生年月日, "YYYY", "Etc/GMT")
計算フィールド(生年月):DATE_FORMAT(生年月日, "MM", "Etc/GMT")

基準日
計算フィールド(基準年):DATE_FORMAT(基準日, "YYYY", "Etc/GMT")
計算フィールド(基準月):DATE_FORMAT(基準日, "MM", "Etc/GMT")

年齢
(基準年-生年-IF(基準月-生年月<0,1,0))&"歳"&(基準月-生年月)+IF(基準月-生年月<0,12,0)&"ヶ月"

基準日の変更

再計算させるには、TISさんの【kintone 一覧レコード一括更新/クリアプラグイン】を利用する

----------------------------------------------

追加:日まで追い込んで、月齢を求める

ゴール2:M歳Nヶ月と表示する
日付フィールド(生年月日):1964-02-11を、
日付フィールド(基準日):2023-01-01で、

文字列_1行(年齢):58歳11ヶ月と表示する
10日まで58歳10ヶ月で、11~末日(翌月10日)までを58歳11ヶ月と表示する

計算フィールド:10日まで706で、11~末日(翌月10日)までを707とする
単位記号をヶ月齢、後ろに付ける

日の差が負(引かれる日が、引く人よりも小さい)なら、
月から1ヶ月(28~31日)を借りてきて、引き算する
その結果を踏まえて、月の差が負(引かれる月が、引く月より小さい)なら、年から1年(12ヶ月)を借りてきて、引き算する。

条件整理

1ヶ月の換算は、月と年によって、変わります
下記のような条件になり、月齢を求めるレベルであれば、実装不要と判断します。
日齢を求めるならば、下記の条件の考慮が必要ですが、kintoneで実装すべきかは疑問です。プラグイン(rex2020の計算式プラグイン)などを利用した方が現実的と考えます。もちろん月齢でも使えます。

今回は、kintoneの標準機能のみでの実現方法になります。

1,3,5,7,8,10,12月→31日
4,6,9,11月→30日
2月は、28日または29日
条件が3パタンがある
・年が4で割り切れない2月(2019,2021,2022…)→28日

・年が4で割り切れて、 年が100で割り切れるが、400では割り切れない2月(1900、2100、2200、…)→28日

・年が4で割り切れて、年が100で割り切れるが、400では割り切れる2月(2000、2400、…)→29日

3つの条件をエクセル関数で、書き換えると(kintoneでは使いません、覚書です)
+IF(AND(MONTH(A1)=2,MOD(YEAR(A1),4)=0)=TRUE,IF(AND(MOD(YEAR(A1),100)=0,MOD(YEAR(A1),400)=0)=TRUE,28,29),29)

条件早見表

生年月日

計算フィールド(生年):DATE_FORMAT(生年月日, "YYYY", "Etc/GMT")
計算フィールド(生年月):DATE_FORMAT(生年月日, "MM", "Etc/GMT")
計算フィールド(生年日にち):DATE_FORMAT(生年月日, "dd", "Etc/GMT")
計算フィールド(生年月数):生年*12+生年月
※下記の書き方ではうまくいかない、一旦数値に変えてから月数を計算する
✖:DATE_FORMAT(生年月日, "YYYY", "Etc/GMT")*12+DATE_FORMAT(生年月日, "MM", "Etc/GMT")

基準日

計算フィールド(基準年):DATE_FORMAT(基準日, "YYYY", "Etc/GMT")
計算フィールド(基準月):DATE_FORMAT(基準日, "MM", "Etc/GMT")
計算フィールド(基準日にち):DATE_FORMAT(基準日, "dd", "Etc/GMT")
計算フィールド(基準数):基準年*12+基準月
※繰り返しになるが、下記の書き方ではうまくいかない、一旦数値に変えてから月数を計算する
✖:DATE_FORMAT(基準日, "YYYY", "Etc/GMT")*12+DATE_FORMAT(基準日, "MM", "Etc/GMT")

年齢

(基準年-生年-IF(基準月-生年月-IF(基準日にち<生年日にち,1,0)<0,1,0))&"歳"
&(基準月-生年月)+IF(基準月-生年月-IF(基準日にち<生年日にち,1,0)<0,12,0)-IF(基準日にち<生年日にち,1,0)&"ヶ月"

日の差が負で、月の位から、1ヶ月を借りる。
その結果を踏まえて、月の差を計算して、負であれば、年の位から、1年を借りる。

月齢

計算フィールド:基準月数-生年月数-IF(基準日にち<生年日にち,1,0)

基準日2023-01-01


基準日2023-01-11


基準日2023-02-10
基準日2023-02-11

関連資料

ぺパコ三


いいなと思ったら応援しよう!