初めて投稿します。
アプリ内に、期日のフィールドが複数あります。起点日を入力することによって、期日がセットされるようjava scriptで記述しています。
このアプリの一覧表示に全期日フィールドが今日以降5年後以前という条件を設定したレコード一覧表示を作成したいと思っていますが、andとorを共存させることができないとサポートセンターから回答いただき、どうしたらよいのかわからずにおります。
javascript、プログラミング初心者ゆえ、どのように考えていったらよいか、思いつきません。お知恵を拝借したく、よろしくお願いいたします。
koroyama さん
一覧の抽出条件の指定は、制約が多くてなかなか思い通りになりませんね。
私はしょうがないので、一覧で抽出できるように項目側に値を設定しています。
日付関連だと、当日・当月・当年などはありますが、5年後などの指定はできません。
この場合は、実際の日付項目とは別に、-5年した日付項目を追加して一覧で使用しています。
今回の場合は、複数の日付ということなのでまとめて、管理できるようにします。
・ min日付:日付1、日付2 … の最小値
・ max日付:(日付1、日付2 … の最大値) -5年
各レコードにこの値を設定しておけば、下記で対象レコードを絞り込めると思います。
「min日付 が当日以降」 and 「max日付が当日以前」
rex0220さま
早速ご回答いただき、ありがとうございます。
考え方が非常に参考になりました。一覧を作成するための日付フィールドを追加すれば、andのみで作成できますね。
ちなみに、minはmoment(Math.min.apply(null,DateArray)).format(‘YYYY-MM-DD’)としましたが、max-5年はどうしたらよいでしょうか?
何度も申し訳ありませんが、よろしくお願いいたします。
こんな感じで、どうでしょう?
record['日付min'].value = minDate([record['日付1'].value,record['日付2'].value,record['日付3'].value]);
record['日付max'].value = maxDate([record['日付1'].value,record['日付2'].value,record['日付3'].value]);
function minDate(arrayDate) {
var mdt = arrayDate.filter(function(dt) {return dt;}).map(function(dt) {return moment(dt)});
return mdt.length > 0 ? moment.min(mdt).format('YYYY-MM-DD') : '';
}
function maxDate(arrayDate) {
var mdt = arrayDate.filter(function(dt) {return dt;}).map(function(dt) {return moment(dt)});
return mdt.length > 0 ? moment.max(mdt).add(-5,'years').format('YYYY-MM-DD') : '';
}
rex0220さま
お礼が遅くなってしまい、申し訳ありません。具体的に示していただき、ありがとうございます。大変たすかりました。