日付の条件付きを求めて、数値を選択したい

お世話になっております。初投稿でございます。

どなたか助けていただけると幸いです。

実現したい動き:入会年数:2年6ヶ月⇒無料招待日:1日、3年6ヶ月⇒無料招待日:2日、4年6ヶ月⇒無料招待日:4日・・みたいな自動計算を行いたいです。

入会年数は過去のここでのご投稿を参考にさせてなんとか動くようにできましたが無料招待日は苦労しております。ぜひご教示お願いいたします。

(function() {
"use strict";
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
kintone.events.on(['app.record.edit.change.入会日',
'app.record.create.change.入会日',
'app.record.index.edit.change.入会日',
'app.record.edit.change.基準日',
'app.record.create.change.基準日',
'app.record.index.edit.change.基準日',
'app.record.create.show',
'app.record.edit.show',
'app.record.index.edit.show',
'app.record.detail.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['基準日'].value = moment().format('YYYY-MM-DD');

}

record['入会年数'].value = ageCal(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 '';
}
})();

====================================================================
//無料招待日はここで詰まってしまいました・・・

kintone.events.on('app.record.index.show', 'app.record.create.show','app.record.edit.show',
'app.record.index.edit.show','app.record.detail.show',function(event) {
var record = event.record;
var 無料招待日 = record.無料招待日.value;

moment.locale('ja');
if (['app.record.create.show', 'app.record.edit.show', 'app.record.index.edit.show'].indexOf(event.type) >= 0) {


switch (無料招待日) {
case ">2年6ヶ月":
無料招待日 = '1';
break;
case ">3年6ケ月":
無料招待日 = '2';
break;
case ">4年6ケ月":
無料招待日 = '4';
break;
default:
付与日数 = = '0';
break;
}
return event;
});

こんにちは。

日付フィールドの値を変更したらイベントが発火するようにしましたがどうでしょうか?

動きが参考になれば幸いです。

(function() {
"use strict";
kintone.events.on([
"app.record.edit.change.入会日",
"app.record.create.change.入会日",
"app.record.index.edit.change.入会日",
"app.record.edit.change.基準日",
"app.record.create.change.基準日",
"app.record.index.edit.change.基準日",
"app.record.create.show",
"app.record.edit.show",
"app.record.index.edit.show",
"app.record.detail.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["基準日"].value = moment().format("YYYY-MM-DD");
}
record["入会年数"].value = ageCal(record["入会日"].value,record["基準日"].value);

// 入会日と基準日の数値が変わったらイベントが走る
if(event.type === "app.record.create.change.入会日" || event.type === "app.record.edit.change.入会日" ||
event.type === "app.record.create.change.基準日" || event.type === "app.record.edit.change.基準日") {

moment.locale("ja");
var wkDate = record["入会日"].value;
var wkReferenceDate = record["基準日"].value;
var totalMonths = 0;
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;
totalMonths = parseInt(years, 10) * 12 + parseInt(months, 10);
}
}
// 月数で判定する
switch(totalMonths >= 0) {
case totalMonths >= 54: // 4年 6ケ月
record.無料招待日.value = 4;
break;
case totalMonths >= 42: // 3年 6ケ月
record.無料招待日.value = 2;
break;
case totalMonths >= 30: // 2年 6ヶ月
record.無料招待日.value = 1;
break;
default:
record.無料招待日.value = 0;
break;
}
}
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 "";
}
})();

TK

お世話になっております。

頂いたソースで想像していた動きができました!この発火はすごいです!!やりたかったことが実現できるって、こんなにうれしいですね(涙)

助けていただき、本当にありがとうございます!!!

恐れ入りますが、せっかく頂いたソースをちゃんと消化したいですが、今のレベルでは全然進まなくて・・お時間が許す時で構わないですが、以下のソースの解釈を頂けますでしょうか?どうぞよろしくお願い致します。

if (!mReferenceDate.isBefore(moment(mDate), “day”)) {
var years = mReferenceDate.diff(moment(mDate), “years”);
var months = mReferenceDate.diff(moment(mDate), “months”) % 12;
totalMonths = parseInt(years, 10) * 12 + parseInt(months, 10);
}

⇒恥ずかしいながら、このソース入会年数計算の時にも出てきてますが、具体的な動きがいまいち理解してなくて・・・

 

 

 

 

その辺はmoment.jsのメソッドなので ”moment.js 使い方" などでググったら詳しいのが出てきます!

 

一応解説しますと1行目の.isBeforeで基準日が入会日より"後"かをみています。

2、3行目の.diffで基準日と入会日の差分を求めています。

4行目では月数で判定をしたかったのでparseIntでNumber型に直して計算してる、って感じですね。

何をしているコードかイマイチ分からなければ、console.logやdebuggerなどを使ってみるのも手です!

TK

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

細かくご説明していただき、本当にありがとうございました。とても感謝しております。

今回は誠にありがとうございました。

これから実践を積んで、理解していきたいと思いました。

 

以上、今後とも宜しくお願い致します。