現在、基準日となる日付p1が以下のように代入されています。
最終的にはp1に近い日がp2であるのかp3であるのかを判定したいと考えております。
javascript
1var p1 = new Date("2021-11-30");
これに対して、比較すべき2つの日付p2とp3は年以外がわかっています。
また、もう一つわかっている条件としてp2とp3はちょうど6か月ずれているということです。
javascript
1var m = 8, d = 15 2//var p2 = new Date("????-"+m+"-"+d+"); 3 var next_m = "" 4 switch (m) { 5 case 1:next_m = 7;break; 6 case 2:next_m = 8;break; 7 case 3:next_m = 9;break; 8 case 4:next_m = 10;break; 9 case 5:next_m = 11;break; 10 case 6:next_m = 12;break; 11 case 7:next_m = 1;break; 12 case 8:next_m = 2;break; 13 case 9:next_m = 3;break; 14 case 10:next_m = 4;break; 15 case 11:next_m = 5;break; 16 case 12:next_m = 6;break; 17 } 18//var p3 = new Date("????-"+next_m+"-"+d+");
この場合p2の8月15日もp3の2月15日もp1の11月30日より前なので結果として????は2021というように判定することができます。
javascript
1var p1 = new Date("2021-11-30"); 2var p2 = new Date("2021-8-15"); 3var p3 = new Date("2021-2-15"); 4p1-p2 < p1 - p3 ? console.log("p2が近いです"):0;
Dateオブジェクトにして比較すればよいだけだと言いたいところですが、ここで悩ましい要素が2つあり頭が混乱しております。
- 例えば、p1は11月30日のままで、p2が6月15日でp3が12月15日であるパターンが来たとします。この時はp3の12月15日はp1の11月30日を超えてしまっているので、未到来の場合は2021ではなくその前のとしての2020であったとしなければなりません。
従って、このケースでは比べるものは以下の通りとなります。
javascript
1var p1 = new Date("2021-11-30"); 2var p2 = new Date("2020-12-15"); 3var p3 = new Date("2021-6-15"); 4p1-p2 < p1 - p3 ? 0:console.log("p3が近いです");
- 一方p2が例えば1月1日でp2とp3が元の月日であるとすると以下の通りになりp2とp3がいずれも未到来のため2020と解釈しなくてはいけません。
javascript
1var p1 = new Date("2021-1-1"); 2var p2 = new Date("2020-8-15"); 3var p3 = new Date("2020-2-15"); 4p1-p2 < p1 - p3 ? console.log("p2が近いです"):0;
とp1の値によって、p2とp3の年が変化したり、p2とp3のどちらかがp1を跨いでいる場合、どちらかの年を変化させたりとても複雑です。
ここまで、記載して説明ができるので、忠実に複雑な分岐を書けば実装はできると思うのですが、やろうとしていることが単純なのにp2とp3の年数が繰り下がったりというのが何かスマートに実装できる方法はないかと質問させていただきました。
アドバイスを頂ければ幸いです。よろしくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/24 02:37
退会済みユーザー
2021/11/24 02:54
2021/11/24 03:37