入社日から退職日までの勤務年数を表示したい

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

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。