日付の項目を2つ用意しています。
日付1
日付2
日付1にある日を選択入力した場合に、
日付2には、その翌月の末日が表示されるよう
luxonをつかってやりたいと考えています。
例)
日付1:6/11 とすると
日付2:7/31 が自動出力
参考文献などありましたら、
ご教示いただけると幸いです。
よろしくお願いいたします。
日付の項目を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()を使います。
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’’)で日付フィールドに合致したフォーマットに直し、翌月末日の日付フィールド格納すれば実現できると思います。
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。