LoginSignup
2
3

More than 5 years have passed since last update.

[kintone]和暦の生年月日から満年齢を算出したい

Last updated at Posted at 2016-04-11

こんな感じにフィールドを配置して、和暦の誕生日や年月日諸々を入力、保存/編集時に満年齢が計算されると便利という事でさくっと作ってみました。

01.png

フィールド定義

フィールド名 フィールドコード
誕生日(年号) 和暦誕生日年号 ドロップダウン
誕生日(年) 和暦誕生年 数値型
誕生日(月) 和暦誕生月 数値型
誕生日(日) 和暦誕生日 数値型
満年齢 満年齢 数値型

動作

  • 和暦の誕生日に該当する項目[誕生日(年号),誕生日(年),誕生日(月),誕生日(日)]に値をセットし、保存を行うと項目[満年齢]に年齢がセットされる。
  • 内部的には和暦の誕生日→西暦の誕生日に変換、西暦の誕生日から現時点での年齢を算出する。

ソースコード

javascript
    kintone.events.on(['app.record.create.submit','app.record.edit.submit'], function (event) 
    {
        var western_calendar_year=0;

        if ((event.record['和暦誕生日年号'].value == "平成") && (event.record['和暦誕生日年'].value > 0)) 
        {
            western_calendar_year = parseInt(event.record['和暦誕生日年'].value)+1988;
        }
        else if
         ((event.record['和暦誕生日年号'].value == "昭和") && (event.record['和暦誕生日年'].value > 0) && (event.record['和暦誕生日年'].value <= 64)) 
        {
            western_calendar_year = parseInt(event.record['和暦誕生日年'].value)+1925;
        }
        else if ((event.record['和暦誕生日年号'].value == "大正") && (event.record['和暦誕生日年'].value > 0) && (event.record['和暦誕生日年'].value <= 15)) 
        {
            western_calendar_year = parseInt(event.record['和暦誕生日年'].value)+1911;
        }
         else if ((event.record['和暦誕生日年号'].value == "明治") && (event.record['和暦誕生日年'].value > 0) && (event.record['和暦誕生日年'].value <= 45)) 
         {
            western_calendar_year = parseInt(event.record['和暦誕生日年'].value)+1867;
        }
         else 
         {
            event.error ="不正な年号と年の組み合わせです。";
    }

       //西暦を算出→満年齢を計算
       event.record['満年齢'].value = getYearMonth(western_calendar_year+"-"+event.record['和暦誕生日月'].value+"-"+event.record['和暦誕生日日'].value,'yy');

        return event;

   });

 function getYearMonth(dtDate, typeDate) {
        var dtToday = new Date();
        var dtFrom = new Date(dtDate);

        switch (typeDate) {
            case 'yy':

                var intDays = (dtToday - Date.parse(dtDate)) / 1000 / 60 / 60 / 24; // シリアル値の単位はミリ秒
                return Math.floor(intDays / 365);

            case 'yymm':

                var intYear = dtToday.getFullYear() - dtFrom.getFullYear();
                var intMonth = dtToday.getMonth() - dtFrom.getMonth();

                if (intMonth < 0) {
                    intYear--;
                    intMonth += 12;
                }
                return intYear + "- " + intMonth;

            default:
                return null;
        }
    }

参考サイト

2
3
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
2
3