kintoneならびにJava初心者です。
kintone導入に合わせて、初めてJavaというものに触れ始めて1ヶ月程度なのでご了承願います。
経過年数を表示するを参考に、勤務年数を表示させたいのですが、表示が「undefined年undefinedヶ月」となってしまいます。
現時点は退職日(RetirementDate)から単純に入社日(JoiningDate)の間の期間を計算するコードになっていますが、
できましたら退職日が空欄の場合は、入社日から現在の日付までの期間が表示されるように、条件分岐をさせたいので、分岐させる方法もできたら教えて頂きたいです。
初心者なので、説明不足な点があったり、無茶を言っているかもしれませんがよろしくお願い致します。
↓↓ 現在のコード ↓↓
const joiningDayFieldCode = 'JoiningDate';
const retirementDayFieldCode = 'RetirementDate';
/**
* 経過年月日を計算する
* @param {string} dateStr 日付文字列
* @returns {object} 計算結果のオブジェクト
*/
const calculateDuration = function(dateStr) {
const currentDate = luxon.DateTime.fromISO(dateStr).startOf('day');
const date = luxon.DateTime.fromISO(dateStr).startOf('day');
// 経過期間を計算する
const duration = currentDate.diff(date, ['years', 'months', 'days']);
return duration.toObject();
};
// 入社からの経過年月日を表示する
const joiningDayValue = record[joiningDayFieldCode].value;
const retirementDayValue = record[retirementDayFieldCode].value;
if (joiningDayValue) {
const joiningDayDuration = calculateDuration(retirementDayValue-joiningDayValue);
const joiningDayElement = kintone.app.record.getFieldElement(joiningDayFieldCode);
const $emLabel = $('<label>');
const $emDiv = $('<span>');
$(joiningDayElement).append($emDiv);
$(joiningDayElement).css({
width: $(joiningDayElement).innerWidth() + 50 + 'px',
});
$emDiv.append($emLabel);
$emLabel.html('<br>');
$emLabel.append(
joiningDayDuration.years + '年' + joiningDayDuration.months + 'ヶ月'
);
$emDiv.css({
color: 'blue',
});
}
return event;
});
})();
こんにちわ。
いくつか修正点がありますが一番大きいと思うのが下記です。
calculateDuration(retirementDayValue-joiningDayValue);
retirementDayValueやjoiningDayValueは文字列なので単純な引き算ができません。
諸々修正してみましたがいかがでしょうか。退職日がない場合も考慮してます。
(function () {
"use strict";
// レコードの表示イベント
kintone.events.on("app.record.detail.show", function (event) {
const joiningDayFieldCode = "JoiningDate";
const retirementDayFieldCode = "RetirementDate";
/**
* 経過年月日を計算する
* @param {string} startDateStr 開始日付文字列 (ISO形式)
* @param {string} [endDateStr] 終了日付文字列 (ISO形式)。省略された場合は本日の日付を使用
* @returns {object} 計算結果のオブジェクト (years, months, days)
*/
const calculateDuration = function (startDateStr, endDateStr) {
const startDate = luxon.DateTime.fromISO(startDateStr).startOf("day");
const endDate = endDateStr
? luxon.DateTime.fromISO(endDateStr).startOf("day")
: luxon.DateTime.now().startOf("day");
// 経過期間を計算する
const duration = endDate.diff(startDate, ["years", "months", "days"]);
return duration.toObject();
};
// 入社からの経過年月日を表示する
const joiningDayValue = event.record[joiningDayFieldCode].value;
const retirementDayValue = event.record[retirementDayFieldCode].value;
if (joiningDayValue) {
const joiningDayDuration = calculateDuration(
joiningDayValue,
retirementDayValue
);
const joiningDayElement =
kintone.app.record.getFieldElement(joiningDayFieldCode);
const $emLabel = $("<label>");
const $emDiv = $("<span>");
$(joiningDayElement).append($emDiv);
$(joiningDayElement).css({
width: $(joiningDayElement).innerWidth() + 50 + "px",
});
$emDiv.append($emLabel);
$emLabel.html("<br>");
$emLabel.append(
joiningDayDuration.years + "年" + joiningDayDuration.months + "ヶ月"
);
$emDiv.css({
color: "blue",
});
}
});
})();
lemon_sour様
修正していただきありがとうございまいます。
無事に望む形にできました。
「いいね!」 1
system
(system)
クローズされました:
4
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。