# 一覧画面で年齢と勤続年数を計算したい

**URL:** <https://community.cybozu.dev/t/topic/6193>\
**Category:** kintone 開発相談\
**Created:** [2022 年 7 月 26 日午前 1:49 UTC](https://community.cybozu.dev/t/topic/6193 "2022-07-26T01:49:33Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account2453](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Legacy\_Account2453](https://community.cybozu.dev/u/Legacy_Account2453)\
**Post date:** [2022 年 7 月 26 日午前 1:49 UTC](https://community.cybozu.dev/t/topic/6193/1 "2022-07-26T01:49:33Z")

</div>

[レコードの更新](https://community.cybozu.dev/hc/ja/articles/201941784-%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%9B%B4%E6%96%B0-PUT-)

[経過年数を表示する](https://community.cybozu.dev/hc/ja/articles/202640900-%E7%B5%8C%E9%81%8E%E5%B9%B4%E6%95%B0%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B)

上記を参考に一覧画面で更新ボタンを押すと、今日現在の年齢と勤続年数を計算したくコードを組みましたが、更新ボタンを押した後、年齢と勤続年数が計算されずページ更新のみ行われる状態です。

開発者ツールのコンソールを確認してもエラーが表示されず、どこを修正すべきか困っています。

初心者で大変恐縮ではございますが、修正点をご教示いただけないでしょうか。

【フィールドについて】

・生年月日（日付）

・入社日（日付）

・年齢（文字列）

・勤続年数（文字列）

【コード】

```
(function() {
  "use strict";
  kintone.events.on('app.record.index.show', function(event){
    var button = document.createElement('button');
    button.innerText = 'update';
    kintone.app.getHeaderMenuSpaceElement().appendChild(button);
    button.addEventListener('click', function(){

//ここに更新処理をかく
    var getBody = { app: kintone.app.getId(),};
    kintone.api(kintone.api.url('/k/v1/records', true), 'GET', getBody, function (resp) {
      var records = resp["records"];
      var putBody = { app: kintone.app.getId(),
      records: []
    };

records.forEach(function(record){

var birthDayFieldCode = record['生年月日'].value;
  var joiningDayFieldCode = record['入社日'].value;
/**
     * 経過年月日を計算する
     * @param {string} dateStr 日付文字列
     * @returns {object} 計算結果のオブジェクト
     */
var calculateDuration = function(dateStr) {
      var currentDate = luxon.DateTime.local().startOf('day');
      var date = luxon.DateTime.fromISO(dateStr).startOf('day');
      // 経過期間を計算する
      var duration = currentDate.diff(date, ['years', 'months', 'days']);
      return duration.toObject();
    };

// 年齢を計算する
    var birthDayValue = record['生年月日'].value;
    var birthDayDuration = calculateDuration(birthDayValue);
    record['年齢'].value = (birthDayDuration.years + '歳' + birthDayDuration.months + 'ヶ月');

// 入社からの経過年月を計算する
    var joiningDayValue = record['入社日'].value;
    var joiningDayDuration = calculateDuration(joiningDayValue);
    record['勤続年数'].value = (joiningDayDuration.years + '年' + joiningDayDuration.months + 'ヶ月');

// リクエストパラメータ作成
            var putBody = ({
              "id": record.$id.value,
              "records": {
                "勤続年数": {
                "value": record.勤続年数.value
},
                  "年齢": {
                  "value": record.年齢.value
                  },
                }
            });
            });

kintone.api(kintone.api.url('/k/v1/records', true), 'PUT', putBody, function(resp){
         // success
        alert("更新成功");
        location.reload(); // 成功したら画面を更新
        }, function(resp) {
        // error
         alert("更新失敗");
          });  
          });
});
  });
})();

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1177](https://avatars.discourse-cdn.com/v4/letter/l/77aa72/32.png) [@Legacy\_Account1177](https://community.cybozu.dev/u/Legacy_Account1177)\
**Post date:** [2022 年 7 月 27 日午前 6:14 UTC](https://community.cybozu.dev/t/topic/6193/2 "2022-07-27T06:14:08Z")

</div>

見た限り、13行目で宣言されたputBodyの配列が空になっているのと、45行目で恐らく配列内のパラメータにしたかったリクエストボディがputBodyとして再宣言されています。

```
// リクエストパラメータ作成
              var putBody = ({
                "id": record.$id.value,
              "records": {
                  "勤続年数": {
                  "value": record.勤続年数.value
                 },
                    "年齢": {
                    "value": record.年齢.value
                    },
                  }
              });

```

これを

```
// リクエストパラメータ作成
            putBody.records.push({
                "id": record.$id.value,
              "record": {
                  "勤続年数": {
                  "value": record.勤続年数.value
                 },
                    "年齢": {
                    "value": record.年齢.value
                    },
                  }
              });

```

こちらに変更すれば良いかと思います。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account2453](https://avatars.discourse-cdn.com/v4/letter/l/898d66/32.png) [@Legacy\_Account2453](https://community.cybozu.dev/u/Legacy_Account2453)\
**Post date:** [2022 年 7 月 28 日午前 12:49 UTC](https://community.cybozu.dev/t/topic/6193/3 "2022-07-28T00:49:27Z")

</div>

mls-hashimotoさま

無事意図した動きができました！

いろんな方の投稿を拝見して頭が混乱していたので大変助かりました。

再宣言しても大丈夫だと思っていたのでまだまだ勉強不足ですね。

この度は本当にありがとうございました。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2024 年 7 月 2 日午前 4:42 UTC](https://community.cybozu.dev/t/topic/6193/4 "2024-07-02T04:42:02Z")

</div>

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