新規投稿
フォローする

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

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

日付1

日付2

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

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

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

例)

日付1:6/11 とすると

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

 

 

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

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

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

0

8件のコメント

Avatar
junk

こんにちは

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

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

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

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

0
Avatar
水田

junkさん

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

 

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

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

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

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

0
Avatar
水田

//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=支払期限
0
Avatar
junk

水田さん

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

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

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

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

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

0
Avatar
水田

junkさん

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

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

まずはお礼まで。

0
Avatar
水田
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;
  });
})();
0
Avatar
junk

水田さん

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

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’’)で日付フィールドに合致したフォーマットに直し、翌月末日の日付フィールド格納すれば実現できると思います。

0
Avatar
水田

junkさん

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

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

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

0
サインインしてコメントを残してください。