ブートストラップカレンダーのパラメーターとして使用されるオブジェクトの配列を返す関数があります。問題は、event_data.startを作成するときです。最後にstart_date.year()を使用すると、日付が無効なためカレンダーが機能しません。2013(または任意の整数)を入力すると、機能します。その行でブレークポイントを使用しました。start_date.year()は常に2013を返します。
var start_date = moment(reminder.start_date);
var stop_date = moment(reminder.stop_date);
var reminder_time = moment(reminder.time, 'HH:MM:ss');
while (start_date.unix() < stop_date.unix()) {
start_date = moment(start_date.year()+ '-' + start_date.month().toString() +'-'+start_date.add('days', 1).date());
event_data.start = new Date(parseInt(start_date.year()), 9, 25 - 3, 16, 0);
events_array.push(event_data); //events_array then used for calendar
}
start_dateオブジェクトはある種の参照として使用されており、実際の値は渡されていないと思います。あなたが私にアイデアを与えることができることを願っています。
このコードでは、手動で文字列を操作しすぎています。moment.jsを使用している場合は、APIに対して作業するのではなく、APIを使用する必要があります。次のようなものを試してください。
while (start_date.isBefore(stop_date)) {
start_date.add('days', 1);
event_data.start = start_date.clone().toDate();
events_array.push(event_data);
}
私が使用し.clone()
、あなたのオブジェクトの日付を使用する方法を私は不確実だから。何をしているのかによっては、必要ない場合もあります。
次に、対処すべきコードにいくつかの奇妙な点があります。まず、定義しますreminder_time
が、何にも使用しないので、なぜそこにあるのかわかりません。
次に、次の行があります。
event_data.start = new Date(parseInt(start_date.year()), 9, 25 - 3, 16, 0);
これは、の年の部分のみを使用しstart_date
、残りを10月22日16:00にハードコーディングします。なぜそうするのかわからないので、上記のコードから省略しました。それが実際にやりたいことである場合は、代わりに次のようにします。
event.start = start_date.clone().month(9).date(22).startOf('day').hour(16).toDate();
ここでは、値の操作がループロジックに干渉するため、必ず使用する必要があり.clone()
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加