したがって、基本的には、月、日、年の 3 つの基本的なドロップダウンを「レンタル元」に、さらに 3 つの「レンタル期限」に使用するレンタル フォームを作成しています。
それは十分に簡単で、うるう年のサポートなども十分に受けています。この問題は、"rent from" に基づいて "rent until" を生成する際に発生します。「賃貸期限」をドロップダウンのあとがきに次の 5 日間のみ表示するようにしたいのですが、それを効率的に行うためのロジックを作成するのに非常に苦労しています。
また、範囲は可変であるため、「レンタルの長さ」パラメーターを使用して変更を行う関数を使用しようとしています。コードは参照点も使用します。ピックアップ ドロップダウンが「pick_up_day」、「pick_up_month」などになるようにします。これは、一貫して ID が付けられた HTML 要素を使用して、コードを複数のプロジェクトに移植できるようにするためです。
ここに私の基本的なロジックと私がこれまでに得たものがあります:
これは開始日などを設定するコードです。
function populate_dates(identifier) {
"use strict";
var i, currentday, node, textbox, maxdays;
while (document.getElementById(identifier + "days").hasChildNodes()) {
document.getElementById(identifier + "days").removeChild(document.getElementById(identifier + "days").firstChild);
}
currentday = new Date();
switch (parseInt(document.getElementById(identifier + "month").value, 10)) {
case 2:
if (new Date(currentday.getFullYear(), 1, 29).getDate() === 29) {
maxdays = 29;
} else {
maxdays = 28;
}
break;
case 9:
case 4:
case 6:
case 11:
maxdays = 30;
break;
default:
maxdays = 31;
break;
}
for (i = 1; i <= maxdays; i = i + 1) {
node = document.createElement("option");
textbox = document.createTextNode(i);
node.value = i;
node.appendChild(textbox);
document.getElementById(identifier + "days").appendChild(node);
}
}
window.onload = function() {
"use strict";
var currentday, i, node, textbox;
currentday = new Date();
for (i = 0; i <= 1; i = i + 1) {
node = document.createElement("option");
textbox = document.createTextNode(currentday.getFullYear() + i);
node.value = currentday.getFullYear() + i;
node.appendChild(textbox);
document.getElementById("pick_up_year").appendChild(node);
}
document.getElementById("pick_up_month").onchange = function () {
populate_dates("pick_up_");
};
populate_dates("pick_up_");
};
ここで、「終了」日付に関するロジックについて、次のような疑似コードを作成しましたが、このような単純なタスクには非常に複雑に思えます。
function a(referencer, ref1, ref2, rentlength) {
//Make datetime object out of ref1's current date;
datetime.setDays(datetime.getDate() + rentlength)
for (i = 0; i <= rentlength; i = i + 1) {
datetime.setDays(datetime.getDate() + i);
outmatrix[outmatrix.length] = [getDates, getMonth, getYear];
}
outmatrix.removeduplicates;
date_generator(ref2, outmatrix)
}
function date_generator(referencer, inputmatrix) {
Clean up referencer
Loop through, create nodes based on array[y+1][x];
}
私が見ていないだけでこれを行うためのより良い方法はありますか?重複を削除しながら Datetime オブジェクトを 3 つのドロップダウンに変える良い方法は何ですか? これを処理するための現在の方法よりも良い方法はありますか?