選択内容によって日付を加算したい

初心者です・・・!

過去の投稿やいろいろな参考サイトを見て書いてみたのですが、なかなかうまくいきません。

お知恵をお貸し頂きたいです><

*****

①掲載開始日に任意の日付を入力

②期間を選択「6ヶ月」「12ヶ月」「24ヶ月」

③支払方法を選択「通常」「一括」

6ヶ月×通常なら 掲載開始日の6か月後の末日を掲載終了日に自動反映

6ヶ月×一括なら 掲載開始日の7か月後(1ヶ月延長)の末日を掲載終了日に自動反映

12ヶ月×通常なら 掲載開始日の12か月後の末日を掲載終了日に自動反映

12ヶ月×一括なら 掲載開始日の13か月後(1ヶ月延長)の末日を掲載終了日に自動反映

24ヶ月×通常なら 掲載開始日の24か月後の末日を掲載終了日に自動反映

24ヶ月×一括なら 掲載開始日の25か月後(1ヶ月延長)の末日を掲載終了日に自動反映

したいです。

*******

(function() {
   “use strict”;
   kintone.events.on([“app.record.create.change.期間”,“app.record.edit.change.期間”,
                      “app.record.create.change.支払方法”,“app.record.edit.change.支払方法”,
                      “app.record.create.change.掲載開始日”,“app.record.edit.change.掲載開始日”], function(event) {
       var record = event.record;
       var date = record.掲載開始日.value;
       var Drop = record.期間.value;
       var pay = record.支払方法.value;

       if (Drop === “6ヶ月” && pay === “通常” && date !== undefined) {
           var month6 = date.plus({months:6}).endOf(‘month’).toFormat(“YYYY-MM-DD”);;
           record.掲載終了日.value = month6.toFormat(‘YYYY-MM-DD’);
       }
       if (Drop === “6ヶ月” && pay === “一括” && date !== undefined) {
        var month7 = date.plus({months:7}).endOf(‘month’).toFormat(“YYYY-MM-DD”);;
        record.掲載終了日.value = month7.toFormat(‘YYYY-MM-DD’);
    }
    if (Drop === “12ヶ月” && pay === “通常” && date !== undefined) {
        var month12 = date.plus({months:12}).endOf(‘month’).toFormat(“YYYY-MM-DD”);;
        record.掲載終了日.value = month12.toFormat(‘YYYY-MM-DD’);
    }
    if (Drop === “12ヶ月” && pay === “一括” && date !== undefined) {
        var month13 = date.plus({months:13}).endOf(‘month’).toFormat(“YYYY-MM-DD”);;
        record.掲載終了日.value = month13.toFormat(‘YYYY-MM-DD’);
    }
    if (Drop === “24ヶ月” && pay === “通常” && date !== undefined) {
        var month24 = date.plus({months:24}).endOf(‘month’).toFormat(“YYYY-MM-DD”);;
        record.掲載終了日.value = month24.toFormat(‘YYYY-MM-DD’);
    }
    if (Drop === “24ヶ月” && pay === “一括” && date !== undefined) {
        var month25 = date.plus({months:25}).endOf(‘month’).toFormat(“YYYY-MM-DD”);;
        record.掲載終了日.value = month25.toFormat(‘YYYY-MM-DD’);
    }
       return event;
   });
})();

パッと見で試していないので間違っているかもしれませんが(><)

チェックボックスだと複数選択できることもあり、取得した値が配列の形になっちゃうので、
payには[“一括”]とか[“通常”]とか[“通常”, “一括”]とか・・・のような配列が入っていると思います。

なので、payが配列であることを考慮した条件文にするとか、

もし通常と一括が両方とも選ばれることが無いのであれば、ラジオボタンに変更してみてはいかがでしょうか:eyes:!?

376177001012

コメントありがとうございます><

ラジオボタンに直してみたのですがうまくいかず(´;ω;`)

toFormat(‘YYYY-MM-DD’)形式がダメなのかなと思い、toFormat(‘yyyy-MM-dd’)に変更もしてみたのですがうまくいかず・・・

↓このようなエラーがでたのですが、どう直してよいかもわからず・・・初心者過ぎてすみません・・・

kintoneカスタマイズの勉強を始めてまだ間もない者です。自身の勉強のために本件調べさせていただきました。

画面から取得した「掲載開始日」をluxonを使って日付処理できるようにするとよいのではと思います。
(「掲載開始日」フィールドの値にそのまま月数を追加するとエラーになってしまうようです)

luxonを使用するには事前に、アプリの設定の「JavaScript / CSSでカスタマイズ」画面にてカスタマイズファイルとして指定する必要があります。
luxonの追加方法は下記ページの「kintone カスタマイズでの導入方法」にあります。
Luxon を使って kintone の日付や日時フィールドのフォーマットをカスタマイズする

luxonを使用したサンプルコードを記載します。私の開発環境では下記コードで動きました。
(支払方法はラジオボタンにしています)

(function() {
   “use strict”;
   kintone.events.on([“app.record.create.change.期間”,“app.record.edit.change.期間”,
                      “app.record.create.change.支払方法”,“app.record.edit.change.支払方法”,
                      “app.record.create.change.掲載開始日”,“app.record.edit.change.掲載開始日”], function(event) {
       
       const record = event.record;
       const date = luxon.DateTime.fromISO(record.掲載開始日.value).startOf(‘day’);  //luxonを使って日付処理できるようにする
       const Drop = record.期間.value;
       const pay = record.支払方法.value;

   
       if (Drop === “6ヶ月” && pay === “通常” && date !== undefined) {
        // month6などの変数は使わずに、直接レコードに入れるように変更しています(以下同様)
           record.掲載終了日.value = date.plus({months:6}).endOf(‘month’).toFormat(‘yyyy-MM-dd’);
       }
       if (Drop === “6ヶ月” && pay === “一括” && date !== undefined) {
          record.掲載終了日.value = date.plus({months:7}).endOf(‘month’).toFormat(‘yyyy-MM-dd’);
       }
       if (Drop === “12ヶ月” && pay === “通常” && date !== undefined) {
          record.掲載終了日.value = date.plus({months:12}).endOf(‘month’).toFormat(‘yyyy-MM-dd’);
      }
      if (Drop === “12ヶ月” && pay === “一括” && date !== undefined) {
          record.掲載終了日.value = date.plus({months:13}).endOf(‘month’).toFormat(‘yyyy-MM-dd’);
      }
      if (Drop === “24ヶ月” && pay === “通常” && date !== undefined) {
          record.掲載終了日.value = date.plus({months:24}).endOf(‘month’).toFormat(‘yyyy-MM-dd’);
      }
      if (Drop === “24ヶ月” && pay === “一括” && date !== undefined) {
          record.掲載終了日.value = date.plus({months:25}).endOf(‘month’).toFormat(‘yyyy-MM-dd’);
      }
       return event;
   });
})();

よろしければ参考までに。

4605066565017

 

ありがとうございます!×10000

こちらでも稼働確認取れました!

とてもシンプルなコードになるんですね。

      const date = luxon.DateTime.fromISO(record.掲載開始日.value).startOf(‘day’);  //luxonを使って日付処理できるようにする

ここが肝だったのですね。勉強になります!!!