閏年(2016)の2月29日表示について、翌月1日の前日という考え方で計算して、次の数値入力に対応したソースコードを作成したのですが、2016-02-29のはずが、2016-02-0と表示されます。
kintone.events.on([‘app.record.create.submit’,‘app.record.edit.submit’], function (event) {
var record = event[‘record’];
var year = record[‘EOP_年’].value;
var month = record[‘EOP_月’].value;
var day = record[‘EOP_月’].value;
nen = moment(year).format(‘YYYY’);
getu = moment(month).format(‘MM’);
nichi = moment(day).add(1,‘month’).format(‘DD’) - 1;
record[‘EOP’].value = nen + “-” + getu + “-” + nichi;
return event;
}
);
ao1962 さん
var day = record[‘EOP_月’].value; は、項目の誤りでしょうか?
月末は、endOf(“month”)で取得できます。
簡単な例では、下記で取得できます。
var t1 = moment(‘2016-02-01’).endOf(“month”).format(‘YYYY-MM-DD’);
> 2016-02-29
2016-02-01ではなくて、翌月1日の前日という設定で
日にちが特定しない変数化で取得できますでしょうか?
翌月1日の前日というこだわりの理由がわかりませんが、下記のようになります。
var t1 = moment(‘2016-02-01’).add(‘month’, 1).startOf(‘month’).add(‘days’, -1).format(‘YYYY-MM-DD’);
>日にちが特定しないやり方
'2016-02-01’の代わりに変数名を指定するだけです。
一度、JavaScript入門を一通り学んでいただくと、いろいろな疑問が解消されると思います。
ドットインストールをお勧めします。
http://dotinstall.com/lessons/basic_javascript_v2
下記は、日付項目を変換する場合です。
record[‘EOP’].value = moment(record[‘日付’].value).add(‘month’, 1).startOf(‘month’).add(‘days’, -1).format(‘YYYY-MM-DD’);
record[‘EOP’].value = moment(record[‘日付’].value).endOf(“month”).format(‘YYYY-MM-DD’);
どちらも結果は同じになりますが、月末を取得する関数が用意されていますので、それを使う方が処理内容が明確になります。
すみません、startOf(‘month’) が抜けていましたので追加しました。
日付項目を変換する場合にrecordのところで[‘EOP_年’]、[‘EOP_月’]、そして01が組み込まれて、結合された日付の答えが欲しいです。
record[‘EOP’].value = moment({years:record[‘EOP_年’].value, months:record[‘EOP_月’].value, days:‘01’ }).endOf(“month”).format(‘YYYY-MM-DD’);
追記
今度は12月の場合に12と入力すると、xxxx-12-31ではなくて、Invalid date と入力されてしまいます。
回答については、こちらへお願いします。
12月入力が日付入力通りにならない