所以,基本上我正在构建一个租赁表格,其中您有三个基本的月、日、年下拉菜单,分别是“租金来自”,然后是另外三个“租金截止”。
这很容易,我什至得到了不错的闰年支持等。问题在于根据“租金来源”生成“租金”。我希望“租到”在后记下拉列表中仅显示接下来的五天,但我很难制定出有效执行此操作的逻辑。
此外,范围是可变的,因此我正在尝试使用一个函数,该函数采用“租赁长度”参数来影响更改。该代码还使用参考点。因此,选择下拉菜单是“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 对象转换为三个下拉列表的好方法是什么?有没有比我现在更好的方法来处理这个问题?