luxon:日付1→日付2(日付1の翌月末日を自動出力)

日付の項目を2つ用意しています。

日付1

日付2

日付1にある日を選択入力した場合に、

日付2には、その翌月の末日が表示されるよう

luxonをつかってやりたいと考えています。

例)

日付1:6/11 とすると

日付2:7/31 が自動出力

 

 

参考文献などありましたら、

ご教示いただけると幸いです。

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

こんにちは

こちらのサイトが参考になるかと思います。

まず、日付1が入力されたタイミングで発火するようにします。(‘app.record.create.change.‘日付1’’)

そしてDateTime.local()で現在日時を取得した後、.plus({month: 1})で翌月の日時を取得し、.endOf(‘month’)で翌月末の日付を取得します。

あとは日付2に、取得した情報を基に日付を格納すれば実現できるかと思います。

junkさん

早速のご連絡ありがとうございます。

 

>>>そしてDateTime.local()で現在日時を取得した後、.plus({month: 1})で翌月の日時を取得し、.endOf(‘month’)で翌月末の日付を取得します。

こちら、方針としてはわかるのですが、

今回は日付1には現在日時ではなく、任意の日付を選択することになっております。

その場合どうなりますでしょうか。よろしくお願いいたします。

//luxon

kintone.events.on([‘app.record.create.change.日付_0’,

‘app.record.edit.change.日付_0’], function (event){

//const currentDate = luxon.DateTime.local()//

var record = event.record; //レコード取得

var 日付_0 = record[‘日付_0’].value;

// 1か月後の末日を取得(現在が2019年12月なら2020/1/31)

//支払期限(日付_7)に日付を表示

record[‘日付_7’].value = 日付_0.plus({ months: 1 }).endOf(‘month’);

return event;

})();

//日付_0=サービス終了日

//日付_7=支払期限

水田さん

任意の日付を指定する場合は、やや力技ではありますが(現状これしか思い浮かばなかったのですが)、

指定日の日付フィールドを取得した後、.substring()で年月日を切り出し、DateTime.local(yyyy,mm,dd)で指定日を取得、

そこから.plus({months: 1}).endOf(‘month’)で翌月末日の情報を取得し、日付フィールドに格納すれば実現可能かと思われます。

また、切り出した年月日は文字列なので数値に変換する必要があります。その場合はNumber()を使います。

Number()についてはこちら、.substring()についてはこちらが参考になると思います。

junkさん

ご返信ありがとうございます。

内容確認しました、一度チャレンジしてみます。

まずはお礼まで。

junkさん

コード修正しましたが、うまく動きません。(日付入力しても変化なし)

ご確認よろしくお願いいたします。

 

・DateTime.local(yyyy,mm,dd)で指定日を取得

→今回は、「今日の時間」を取得する必要がないと思うので、

コードに入れていません。

ある任意の日付に対して、翌月の末日を自動出力したいだけです

無知でしたら申し訳ありません。

 

・Number()

今回は、文字列→数値に変換のためparseInt()を用いました。

 

(function () {

  “use strict”;

  kintone.events.on([‘app.record.create.change.日付_0’,

                     ‘app.record.edit.change.日付_0’], function (event){

    //レコード取得

    var record = event.record; 

    //日付フィールド取得

    var 日付_0 = record[‘日付_0’].value;

    //.substring()で年月日を切り出し

    var 日付_0_substring = 日付_0.substring(0);

    //.parseInt()で文字列→数値へ変換

    var 日付_0_substring_parseInt = parseInt(‘日付_0_substring’,10);

    //.plus({months: 1}).endOf(‘month’)で翌月末日の情報を取得

    var 日付_0_substring_parseInt_日付_7 = 日付_0_substring_parseInt.plus({months: 1}).endOf(‘month’);

    //日付フィールドに格納

    record[‘日付_7’].value = 日付_0_substring_parseInt_日付_7;

    return event;

  });

})();

水田さん

表現が紛らわしくなってすみません。

luxonではDateTime.local()の引数に年月日を入れるとその日付の情報を取得できます。

(例)DateTime.local(2021,01,01)と書くと2021年1月1日の情報を取得

今回の場合ですと指定日の日付フィールドの年月日を引数に入れれば良いのです。

そのためには指定日の日付フィールドを取得し、邪魔なもの( - (ハイフン))を取るために.substring()で年、月、日をそれぞれ切り出し、Number()あるいはparseInt()で数値化します。

そして、DateTime.local()の引数に数値化した年、月、日を入れ、更に.plus({months: 1}).endOf(‘month’)で翌月末日の情報を取得します。

最後に、.toFormat(’yyyy-mm-dd’’)で日付フィールドに合致したフォーマットに直し、翌月末日の日付フィールド格納すれば実現できると思います。

junkさん

ご連絡ありがとうございます。

再度コードを修正してみます。

ひとまず確認とお礼のご連絡までとさせていただきます。

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