會喜歡這個工作?:
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);
}
http://jsfiddle.net/Sn6Ws/
根據您的文本框值的格式一環,你可以將它設置像這樣:
$(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);
}
}
http://jsfiddle.net/Sn6Ws/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演示它:
http://jsfiddle.net/Sn6Ws/4/
當然,要小心,如果日期不具有指定格式進來(在情況下,用戶可以在什麼鍵入此),代碼將最有可能拋出一個錯誤。在進行某些操作之前(比如確保每個項目是一個數字/整數,確保天數在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];
}
http://jsfiddle.net/Sn6Ws/6/
任何變化,你可以在SQL做到這一點,而不是一個JavaScript的循環?它很可能會更快。假設你的問題,我明白你正在插入多個記錄完全基於日期。 – Leeish 2013-02-12 20:37:31
你在用什麼數據庫? – Samuel 2013-02-12 20:39:36
這是一個JavaScript或SQL問題? – Bergi 2013-02-12 20:44:47