経過年数を表示する

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

経過年数を表示する このサンプルでやっていることを自社用にカスタマイズしたいですが、初心者のため、どんな風にすればよろしいか全然わからなくて、投稿させていただきました。

①年齢計算⇒ボタンを押すと年齢を表示してます。

⇒⇒⇒これをフォームに『年齢』フィールドを追加して、ここに年齢が入るようにしたい。

②経過年数⇒入社年月日の下に表示してます。

⇒⇒⇒これもフォームに『勤続』フィールドを追加して、ここに勤続年月が入るようにしたい。

ぜひ、ご指導のほど、よろしくお願い致します。

玲香さん

年齢を自動計算で求めたい が参考になると思います。

勤続年月もこれの応用で、計算できますので、試してみてください。

rex0220 様

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

とても参考になる投稿で本当にありがとうございます。

初心者で大変恐縮でございますが、

①やっぱり『基準日』みたいなフィールドを1個設けないといけないでしょうか?

②お手数ですと重々承知ですが、できれば年齢計算ソースをちょっと説明して頂けると幸いです。

よろしくお願い致します。

// フィールド制御
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 + "ヶ月";
}

 

 

>①やっぱり『基準日』みたいなフィールドを1個設けないといけないでしょうか?

当日でよければ、項目の代わりに当日で計算すればいいだけです。
ただ、編集画面で設定した年齢は自動更新しないので、例では「基準日」を設けて表示しているのだと思います。

>②お手数ですと重々承知ですが、できれば年齢計算ソースをちょっと説明して頂けると幸いです。

 

// 年齢計算
function ageCal(wkDate, wkReferenceDate) {
if (wkDate && wkReferenceDate) { // 指定日と基準日が入力されているか?
var mDate = moment(wkDate); // 指定日 を moment オブジェクトに変換
var mReferenceDate = moment(wkReferenceDate); // 基準日 を moment オブジェクトに変換
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 ''; // 指定日または基準日が未入力、指定日>基準日 の場合
}

 

// 本日日付で計算

record['年齢'].value = ageCal2(record['生年月日'].value);


// 年齢計算
function ageCal2(wkDate) {
if (wkDate) { // 指定日が入力されているか?
var mDate = moment(wkDate); // 指定日 を moment オブジェクトに変換
var mReferenceDate = moment(); // 本日(基準日) を moment オブジェクトに変換
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 生年月日プラグイン は、詳細画面・一覧画面表示時に年齢計算しています。

 

rex0220 様

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

ご指導ありがとうございます。ひとまずやってみます。

いつも本当にありがとうございます。必要に応じて今後も専用プラグインを検討させていただきます。

rex0220

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

テーブル内の数値を科目ごとに集計してフィールドに入れたい の投稿をご拝見して、

先日投稿させて頂いた有休計算についての参考にしたいと思いまして、

例えば、今の科目に『有休』を追加し、

開始:出勤時刻、終了:退勤時刻、休憩:数値型、勤務時間:計算 終了 - 開始 - 休憩 * 60 とした場合、勤務時間合計の自動計算は可能でしょうか?

大変恐縮ですが、コードを変更してみましたが、全然合計ができなくて、アドバイス頂ければ幸いです。

(function() {
“use strict”;

var fields = [‘科目’, ‘金額’,‘勤務時間’, ‘Table’];
var kamokuInfos = {
‘切符代’: ‘切符代合計’,
‘宿泊費’: ‘宿泊費合計’,
‘車関係’: ‘車関係合計’,
‘有給’: ‘勤務時間合計’,
}

var events = [“app.record.edit.show”, “app.record.create.show”];
fields.forEach(function(field) {
events.push(“app.record.edit.change.” + field);
events.push(“app.record.create.change.” + field);
})

var totalFields = [];
Object.keys(kamokuInfos).forEach(function(kamoku) {
var tcode = kamokuInfos[kamoku];
if (totalFields.indexOf(tcode) < 0) {
totalFields.push(tcode);
}
});

kintone.events.on(events, function(event) {
var record = event.record;
totalFields.forEach(function(tcode) {
record[tcode].value = 0;
record[tcode].disabled = true;
});
var subTable = record[‘Table’].value;
subTable.forEach(function(rows) {
var kamoku = rows.value[‘科目’].value;
if (Object.keys(kamokuInfos).indexOf(kamoku) >= 0) {
var tcode = kamokuInfos[kamoku];
if (rows.value[‘金額’].value) {
record[tcode].value += Number(rows.value[‘金額’].value);
if (rows.value[‘勤務時間’].value) {
record[tcode].value += Number(rows.value[‘勤務時間’].value);
}
}
}
});

return event;
});
})();

☆また、rex0220さんの開発した計算プラグインはこれらに対応しているでしょうか?

毎度助けていただいて大変恐縮ですが、よろしくお願い致します。

 

勤務時間は、“8時間30分” のような文字列ですので、Number で数値変換は出来ません。

また、「テーブル内の数値を科目ごとに集計してフィールドに入れたい」に無理矢理、時間計算を入れても、意味がありません。

残念ながら、計算式プラグインは時間計算には対応していません。

時間の累計でしたら、Moment.js の duration が便利ですので、使ってみてください。

http://momentjs.com/docs/#/durations/

初期設定
var d1 = moment.duration(0);

加算
var d2 = moment.duration(“8時間30分”);
d1.add(d2);

時間取得
d1.as(‘hours’);