javascript - 使用javascript从输入开始循环到结束日期

标签 javascript sql date loops

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

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 问题,我需要用 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);
}

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/

关于javascript - 使用javascript从输入开始循环到结束日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841328/

相关文章:

asp.net - 设置文本样式 asp.net javascript

javascript - 删除部分文本

mysql - 在mysql中用2行替换一行

mysql - 从文本创建文章别名的 SQL 查询

php - 使用 mysql 和 php 仅返回一次月份和日期

javascript - 更改字段属性

javascript - XHR responseText 为空字符串

javascript - 如何更改 nvd3 中图例文本的字体?

php - 使用 SQL 选择特定级别的行

javascript - 在moment js中如何检查日期是否是过去的?