我有一个函数,它返回一个对象数组,用作引导日历的参数。 问题是当我创建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,而不是针对它工作。 尝试这样的事情:
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()
因为否则对值的操作会干扰您的循环逻辑。