我有一个开始日期和输入结束。我需要将所有日期从startdate到enddate放入数据库。因此我需要制作一个这样的循环:
FOR i = startdate; i <= enddate; i + 1 day
{
here i use the date
}
如何使用输入框中的日期创建这样的循环?
如果我尝试这样做,我会收到'无效日期':
var endDate = new Date($("#enddate").val());
我不能像你在答案中所说的那样使用endDate.getTime(),如果我这样做的话。
var endDate = $("#enddate").val());
var endDateTime = endDate.getTime();
基本上如此:如何将输入转换为日期? enddate的输入是这样的:dd / mm / yyyy。
不,这不是一个SQL问题,我需要这样做是因为我需要先查看日期。
感谢您帮助我;)
答案 0 :(得分:2)
像这样的循环会起作用吗?:
var current_date = new Date("01/13/2013");
var end_date = new Date("01/20/2013");
var end_date_time = end_date.getTime();
while (current_date.getTime() < end_date_time) {
console.log(current_date);
current_date.setDate(current_date.getDate()+1);
}
根据文本框值的格式,您可以这样设置:
$(document).ready(function () {
$("#btn").on("click", function () {
dateLooper(function (cur, end) {
console.log("Current date: " + cur.toString() + ", End Date: " + end.toString());
});
});
});
function dateLooper(callback) {
var start_date_text = document.getElementById("start_date").value;
var end_date_text = document.getElementById("end_date").value;
var current_date = new Date(start_date_text);
var end_date = new Date(end_date_text);
var end_date_time = end_date.getTime();
while (current_date.getTime() < end_date_time) {
//console.log(current_date);
callback.call(this, current_date, end_date);
current_date.setDate(current_date.getDate()+1);
}
}
根据你的评论解释日期的格式为“dd / mm / yyyy”,你可以使用类似的东西:
var start_date_text = document.getElementById("start_date").value;
var start_split = start_date_text.split("/");
if (start_split.length != 3) {
return false;
}
start_date_text = start_split[1] + "/" + start_split[0] + "/" + start_split[2];
var end_date_text = document.getElementById("end_date").value;
var end_split = end_date_text.split("/");
if (end_split.length != 3) {
return false;
}
end_date_text = end_split[1] + "/" + end_split[0] + "/" + end_split[2];
在将日期传递给new Date
之前以正确的格式获取日期。这是一个更新的jsFiddle,它演示了它:
当然,请注意,如果日期没有使用指定的格式(如果用户可以输入或其他内容),代码很可能会抛出错误。显然,您可以在进行某些操作之前设置更多检查以确保设置某些内容(例如确保每个项目都是数字/整数,确保日期在1到31之间,等等)。因此,您可能想要使用正则表达式的路径。至少使用正则表达式,您可以指定特定模式并知道它是否完美匹配,并立即获得构建日期所需的值。
使用正则表达式,这是一个不完整但希望有所帮助的例子:
function dateLooper(callback) {
var re = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var start_date_text = document.getElementById("start_date").value;
var start_match = re.exec(start_date_text);
if (start_match) {
var valid = true;
// Set `valid` variable based on the following
// Validate start_match[1] is valid day
// Validate start_match[2] is valid month
// Validate start_match[3] is valid year
if (valid) {
start_date_text = combineDate(start_match);
} else {
return false;
}
} else {
return false;
}
var end_date_text = document.getElementById("end_date").value;
var end_match = re.exec(end_date_text);
if (end_match) {
var valid = true;
// Set `valid` variable based on the following
// Validate end_match[1] is valid day
// Validate end_match[2] is valid month
// Validate end_match[3] is valid year
if (valid) {
end_date_text = combineDate(end_match);
} else {
return false;
}
} else {
return false;
}
var current_date = new Date(start_date_text);
var end_date = new Date(end_date_text);
var end_date_time = end_date.getTime();
var days_spent = 0;
while (current_date.getTime() < end_date_time) {
days_spent++;
callback.call(this, current_date, end_date, days_spent);
current_date.setDate(current_date.getDate()+1);
}
return days_spent;
}
function combineDate(re_match) {
return re_match[2] + "/" + re_match[1] + "/" + re_match[3];
}