Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript从输入循环从startdate到enddate_Javascript_Sql_Date_Loops - Fatal编程技术网

使用javascript从输入循环从startdate到enddate

使用javascript从输入循环从startdate到enddate,javascript,sql,date,loops,Javascript,Sql,Date,Loops,我从输入中得到了开始日期和结束日期。我需要把从开始日期到结束日期的所有日期都输入数据库。因此,我需要这样做一个循环: FOR i = startdate; i <= enddate; i + 1 day { here i use the date } 我不能像你在回答中说的那样使用endDate.getTime(),如果我这样做的话 var endDate = $("#enddate").val()); var endDateTime = endDate.getTime();

我从输入中得到了开始日期和结束日期。我需要把从开始日期到结束日期的所有日期都输入数据库。因此,我需要这样做一个循环:

FOR i = startdate; i <= enddate; i + 1 day 
{
   here i use the date
}
我不能像你在回答中说的那样使用endDate.getTime(),如果我这样做的话

var endDate = $("#enddate").val());
var endDateTime = endDate.getTime();
那么基本上:如何将输入转换为日期?enddate的输入如下:dd/mm/yyyy

不,这不是一个SQL问题,我需要做的是javascript,因为我需要先检查日期


谢谢你帮助我;)

循环是否可以这样工作

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);
}
在将日期传递到新日期之前,以正确的格式获取日期。下面是一个更新的JSFIDLE来演示它:

当然,要小心,如果日期没有以指定的格式出现(以防用户可以键入此内容或其他内容),代码很可能会抛出错误。显然,您可以在继续执行某些操作之前进行更多检查,以确保设置了某些内容(例如,确保每个项目都是数字/整数,确保天数在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];
}
函数日期循环器(回调){
var re=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var start_date_text=document.getElementById(“start_date”).value;
var start\u match=re.exec(开始日期文本);
如果(开始比赛){
var valid=true;
//根据以下内容设置'valid'变量
//验证开始匹配[1]是否有效
//验证开始匹配[2]是否在一个月内有效
//验证开始匹配[3]是否为有效年份
如果(有效){
开始日期文本=组合日期(开始匹配);
}否则{
返回false;
}
}否则{
返回false;
}
var end_date_text=document.getElementById(“end_date”).value;
var end\u match=re.exec(end\u date\u text);
如果(结束匹配){
var valid=true;
//根据以下内容设置'valid'变量
//验证结束匹配[1]是否有效
//验证结束匹配[2]的有效月份
//验证end_匹配[3]是否为有效年份
如果(有效){
结束日期文本=组合日期(结束匹配);
}否则{
返回false;
}
}否则{
返回false;
}
var当前日期=新日期(开始日期文本);
变量结束日期=新日期(结束日期文本);
var end_date_time=end_date.getTime();
风险值天数=0;
while(当前日期.getTime()

您可以在SQL而不是javascript循环中进行任何更改吗?它很可能会更快。假设通过您的问题,我正确理解您仅根据日期插入多条记录。您使用的是什么数据库?这是JavaScript还是SQL问题?我完全可以使用while循环,但它不起作用,因为我无法将输入值转换为日期格式。如果你知道答案,你能编辑你的代码吗?@user2066100我更新了我的答案并做了一些解释。试试最后一个例子,让我知道这是否有帮助拆分帮助我使其成为日期格式。已经进行了验证。但是谢谢。
$(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);
    }
}
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];
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];
}