Изменяя диапазон просмотра с помощью следующего кода, я получаю все события, которые будут отображаться, но для определенных дней они не будут отображаться.
С диапазоном следующих дней - 18, 19, 20 или 21 день, события не будут отображаться, в противном случае все в порядке для всех типов диапазонов.
Проверка следующего свойства объекта:
$('#fullcalendar_scheduler').fullCalendar('getView').timeBodyScroller.canvas.width
Я получаю --> "",
вместо положительной ширины ...
Есть идеи? Есть известная проблема?
$('#fullcalendar_scheduler').fullCalendar('option', 'visibleRange', {
start: new Date(startDate).yyyymmdd(),
end: dateAdd(startDate, currentDurationCount, $('#zoom-scale-selector').val()).yyyymmdd(),
});
Следующая функция получает дату начала и окончания, я также опубликую функцию dateAdd:
function updateTimelineDuration(start_date, end_date) {
if (typeof start_date === 'undefined' || start_date === null || start_date.length == 0) {
start_date = $.trim($("#start_date").val()).substring(0, 10);
}
// If we have no 'start_date', from any source, don't do anything
if (typeof start_date === 'undefined' || start_date === null || start_date.length == 0) {
return;
}
var startDate = new Date(start_date);
if (typeof end_date === 'undefined' || end_date === null || end_date.length == 0) {
end_date = dateAdd(startDate, currentDurationCount - 1, $('#zoom-scale-selector').val());
}
var endDate = new Date(end_date);
var conversionDivisor;
switch ($('#zoom-scale-selector').val()) {
case 'month':
// TODO: Fix me
// 1 month (30 days) = 2592000000 ms
conversionDivisor = (1000 * 60 * 60 * 24 * 30);
break;
case 'week':
// 1 week = 604800000 ms
conversionDivisor = (1000 * 60 * 60 * 24 * 7);
break;
case 'day':
default:
// 1 day = 86400000 ms
conversionDivisor = (1000 * 60 * 60 * 24);
}
currentDurationCount = Math.round((endDate - startDate) / conversionDivisor) + 1;
if (currentDurationCount < 1) { currentDurationCount = 1; }
// Adjust timeline
$('#fullcalendar_scheduler').fullCalendar('changeView', 'timeline', new Date(startDate).yyyymmdd());
$('#fullcalendar_scheduler').fullCalendar('option', 'visibleRange', {
start: new Date(startDate).yyyymmdd(),
end: dateAdd(startDate, currentDurationCount, $('#zoom-scale-selector').val()).yyyymmdd(),
});
$('#fullcalendar_scheduler').fullCalendar('render');
// Update zoom-text
$('#zoom-text').text(currentDurationCount);
}
Вот функция dateAdd:
function dateAdd(date, interval, units) {
var ret = new Date(date); // don't change original date
var checkRollover = function () { if (ret.getDate() != date.getDate()) ret.setDate(0); };
switch (units.toLowerCase()) {
case 'year': ret.setFullYear(ret.getFullYear() + interval); checkRollover(); break;
case 'quarter': ret.setMonth(ret.getMonth() + 3 * interval); checkRollover(); break;
case 'month': ret.setMonth(ret.getMonth() + interval); checkRollover(); break;
case 'week': ret.setDate(ret.getDate() + 7 * interval); break;
case 'day': ret.setDate(ret.getDate() + interval); break;
case 'hour': ret.setTime(ret.getTime() + interval * 3600000); break;
case 'minute': ret.setTime(ret.getTime() + interval * 60000); break;
case 'second': ret.setTime(ret.getTime() + interval * 1000); break;
default: ret = undefined; break;
}
return ret;
}