0

多くのjQuery UIコントロール、特にdatepickerを利用しているasp.netアプリに取り組んでいます。

私のWebサービスでは、データベースを呼び出してオブジェクトのリストを取得し、それらをjavascriptに戻して、次のような1つ以上のオブジェクトを含む配列に解析しています:

JavaScript オブジェクト

DatePicker に css スタイルを適用できるように、このオブジェクトの配列をループして JavaScript の Date がオブジェクトの EndDate プロパティと StartDate プロパティの間に収まるかどうかを確認するロジックを組み込む必要があります。最初の質問ですが、EndDate/StartDate プロパティをこの形式から有効な JavaScript 日付に変換する方法はありますか? もしそうなら、どうすれば配列を反復処理し、日付が範囲内にあるかどうかを確認するロジックを適用できますか?

どんな助けでも大歓迎です!

編集:ここの画像は見にくいことに気付きました。ここでプロパティをより明確に読み取ることができます:

画像リンク

ここに要求されたように、いくつかのサンプルコードがあります:

function createDateRangesForCalendar() {
    $.ajax({
        type: "POST",
        url: "../Services/BookingService.asmx/GetCalendarDateRanges",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (response) {
            dateRanges = $.parseJSON(response.d);
        },
        error: function (xhr, textStatus, thrownError) {
            alert(textStatus);
            alert(thrownError);
        }
    });
}

function markInvalidDates(date) {

    var isHoliday = false;
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();

    isHoliday = checkIsHoliday(date);

    if ($.inArray(dmy, invalidDays) == -1) {

        for (var i = 0; i < dateRanges.length; i++) {
            // if date falls in between start and end date of object[i] return something like: return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"];
            // else loop through to the next object and try there
            } 

        if (isHoliday == true) {
            return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"];
        } else {
            return [true, ""];
        }
    } else {
        return [false, "unavailable", "Unavailable"];
    }
}
4

3 に答える 3

2

StartDate と EndDate は、末尾と先頭のスラッシュを除いて、有効な JSON のように思えます。それ以外の場合は、値の単純な評価により、操作可能な JS Date オブジェクトが生成されます。

2 番目のポイントとして、 array を従来のようにループさせない理由は何ですか? いくつかのコードは、より多くのことを言う方がはるかに便利です。

于 2012-06-05T17:15:42.900 に答える
2

最初の質問ですが、EndDate/StartDate プロパティをこの形式から有効な JavaScript 日付に変換する方法はありますか?

フォーマットは次のようです: /Date(MILLISECONDS)/. 有効な JS 日付オブジェクトは、次のように取得できますnew Date(s.match(/Date\((\d+)/)[1])

もしそうなら、どうすれば配列を反復処理し、日付が範囲内にあるかどうかを確認するロジックを適用できますか?

var re = /Date\((\d+)/;
for(var i in arr) {
    var start = new Date(arr[i].startDate.match(re)[1]),
        end = new Date(arr[i].endDate.match(re)[1]);
    if(myDate < end && myDate > start)
        // do something.
}

上記は、私が理解している方法で、あなたの質問に答えているようです。

于 2012-06-05T17:22:58.343 に答える
2

\Date()\ ラッパーなしで、開始日と終了日を数値として返すだけです。

ループ内で、目標日から JavaScript の日付を作成します。つまりnew Date(1334548800000)、目標日とそれらの開始日および終了日との単純な比較を使用します。

ループすることはできますが$.each(yourArray, function(id,item){ date comparison logic here });、JS オブジェクトを操作するための適切なユーティリティ セットについては、Underscore ライブラリを調べることをお勧めします。

于 2012-06-05T17:23:36.123 に答える