1

ブートストラップ カレンダーのパラメーターとして使用されるオブジェクトの配列を返す関数があります。問題は、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 オブジェクトが何らかの参照として使用され、実際の値が渡されていないなどと考えています。アイデアをいただければ幸いです。

4

1 に答える 1

1

このコードでは、手作業による文字列操作が多すぎます。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()

于 2013-09-22T17:31:02.033 に答える