使用 momentjs 和引导日历时的日期格式问题



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

最新更新