新規投稿
フォローする

年齢と経過年数を自動計算する

いつも大変お世話になっております。

年齢を自動計算で求めたいを参考に一回投稿しておりますが、

年齢と経過年数を表示する場合、ageCalを無理やり使ってしまい、完全引用で以下のようにコードを書いたら一応は動いてくれましたが、正しい組み方を教えて頂いたら幸いです。初心者のため、日々勉強中ですが、ぜひアドバイスお願い致します。

(function() {
"use strict";


kintone.events.on([
'app.record.edit.change.生年月日',
'app.record.edit.change.基準日',
'app.record.edit.change.入社日',
'app.record.edit.change.経過年数',
'app.record.create.change.生年月日',
'app.record.create.change.基準日',
'app.record.create.change.入社日',
'app.record.create.change.経過年数',
'app.record.index.edit.change.生年月日',
'app.record.index.edit.change.基準日',
'app.record.index.edit.change.入社日',
'app.record.index.edit.change.経過年数',
'app.record.edit.show',
'app.record.create.show',
'app.record.index.edit.show'
], function(event) {
var record = event.record;

moment.locale('ja');
if (['app.record.create.show', 'app.record.edit.show', 'app.record.index.edit.show'].indexOf(event.type) >= 0) {
// フィールド制御
record.年齢.disabled = true;
record.経過年数.disabled = true;
record['基準日'].value = moment().format('YYYY-MM-DD');
}
record['年齢'].value = ageCal(record['生年月日'].value, record['基準日'].value);
record['経過年数'].value = ageCal2(record['入社日'].value, record['基準日'].value);
return event;
});

// 年齢計算
function ageCal(wkDate, wkReferenceDate) {
if (wkDate && wkReferenceDate) { 
var mDate = moment(wkDate);
var mReferenceDate = moment(wkReferenceDate);
if (!mReferenceDate.isBefore(moment(mDate), 'day')) {
var years = mReferenceDate.diff(moment(mDate), 'years');
var months = mReferenceDate.diff(moment(mDate), 'months') % 12;
return years + "歳 " + months + "ヶ月";
}
}
return '';
}

// 経過年数計算
function ageCal2(wkDate, wkReferenceDate) {
if (wkDate && wkReferenceDate) { 
var mDate = moment(wkDate);
var mReferenceDate = moment(wkReferenceDate);
if (!mReferenceDate.isBefore(moment(mDate), 'day')) {
var years = mReferenceDate.diff(moment(mDate), 'years');
var months = mReferenceDate.diff(moment(mDate), 'months') % 12;
return years + "年 " + months + "ヶ月";
}
}
return '';// 指定日または基準日が未入力、指定日>基準日 の場合
}

})();

 

0

2件のコメント

Avatar
江田篤史

玲香様

お世話になっております。 cstapの江田です。

間違ってはいないと思います。 ただ、記述の重複を嫌うのであれば、例えば下記のように引数を追加して、単位を場合分けするなどの方法も考えられます。

(function () {
  "use strict";
  kintone.events.on(['app.record.edit.change.生年月日', 'app.record.edit.change.基準日', 'app.record.edit.change.入社日', 'app.record.edit.change.経過年数', 'app.record.create.change.生年月日', 'app.record.create.change.基準日', 'app.record.create.change.入社日', 'app.record.create.change.経過年数', 'app.record.index.edit.change.生年月日', 'app.record.index.edit.change.基準日', 'app.record.index.edit.change.入社日', 'app.record.index.edit.change.経過年数', 'app.record.edit.show', 'app.record.create.show', 'app.record.index.edit.show'], function (event) {
    var record = event.record;
    moment.locale('ja');
    if (['app.record.create.show', 'app.record.edit.show', 'app.record.index.edit.show'].indexOf(event.type) >= 0) {
      // フィールド制御
      record.年齢.disabled = true;
      record.経過年数.disabled = true;
      record['基準日'].value = moment().format('YYYY-MM-DD');
    }
    record['年齢'].value = ageCal(record['生年月日'].value, record['基準日'].value, 0);
    record['経過年数'].value = ageCal(record['入社日'].value, record['基準日'].value, 1);
    return event;
  });
  // 年齢計算
  function ageCal(wkDate, wkReferenceDate, unitType) {
    if (wkDate && wkReferenceDate) {
      var mDate = moment(wkDate);
      var mReferenceDate = moment(wkReferenceDate);
      if (!mReferenceDate.isBefore(moment(mDate), 'day')) {
        var years = mReferenceDate.diff(moment(mDate), 'years');
        var months = mReferenceDate.diff(moment(mDate), 'months') % 12;
        if(unitType === 0) return years + "歳 " + months + "ヶ月";
        return years + "年 " + months + "ヶ月";
      }
    }
    return '';
  }
})();
1
Avatar
玲香

江田篤史 様

いつも大変お世話になっております。

アドバイスいただき、本当にありがとうございます。

とても勉強になりました。これからもどうぞよろしくお願い致します。

0
サインインしてコメントを残してください。