1

無効にする必要がある日が翌日にシフトするという問題に遭遇しました。アイデアは、オブジェクトに存在しない日、bookingまたは 1 未満の値を持つ日をカレンダーで無効にする必要があるということです。

これは、 jsfiddleでのスクリプトとデモの簡略化されたバージョンです。

var bookings = {
    "2012-09-01": 24,
    "2012-09-03": 31,
    "2012-09-05": 27,
    "2012-09-06": 9, 
    "2012-09-07": 18, 
    "2012-09-08": 0, 
    "2012-09-10": 20, 
    "2012-09-12": 19, 
    "2012-09-13": 0, 
    "2012-09-14": 9, 
    "2012-09-15": 24, 
    "2012-09-17": 19, 
    "2012-09-19": 28, 
    "2012-09-20": 15, 
    "2012-09-21": 12, 
    "2012-09-22": 25, 
    "2012-09-24": 19, 
    "2012-09-26": 0, 
    "2012-09-27": 0, 
    "2012-09-28": 0, 
    "2012-09-29": 0
};

function MyEvent(date)
{
    bookings = bookings || {};
    this.date = date.toISOString().substr(0, 10);
    this.display = (typeof bookings[this.date] == 'number' && bookings[this.date] > 0);
    return this;
}

MyEvent.prototype.toArray = function () { 
    return [this.display, null, null]; 
};

$(function ()
{
    $('#eventCalendar').datepicker({
            dateFormat:    "yy-mm-dd",
            firstDay:      1,
            defaultDate:   "2012-09-24",
            beforeShowDay: function (date)
            {
                return new MyEvent(date).toArray();
            }
        }
    );
});

誰かが私が間違っていることを教えてくれますか、それともバグですか?

4

1 に答える 1

1

少し苦労しましたが、バグではありません。以下の使用に問題があります。

date.toISOString()

関数はタイムゾーンオフセットを無視するため、操作はプラグインから渡された元の日付とは異なる日付(たとえば翌日)を返す可能性があります

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/toISOString

だからあなたの状態はうまくいきません。

これは、その関数を使用していない動作中のフィドルです:http: //jsfiddle.net/nBejK/2/

于 2012-10-20T10:56:52.157 に答える