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 而不是反对它。尝试这样的事情:

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 回答