2

入力から開始日と終了日を取得しました。そして、開始日から終了日までのすべての日付をデータベースに入れる必要があります。したがって、次のようなループを作成する必要があります。

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 です。

私を助けてくれてありがとう;)

4

1 に答える 1

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);
}

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/

于 2013-02-12T20:47:23.957 に答える