Fullcalendar: изменение цвета для определенных дней

Я застрял в проекте, который я получаю на работе. Мне нужно изменить цвет фона на несколько дней. Это календарь, который должен видеть пользователь, какие дни доступны, а какие нет. Я узнал, что есть атрибут, называемый "дата-дата", но я не нашел возможности его использовать.

Есть ли способ манипулировать фоном конкретных дней?

Я думаю, что должен быть способ, потому что ячейка, которая показывает текущую дату, имеет другой цвет.

Ответы

Ответ 1

Для представлений month, basicWeek и basicDay вы можете изменить рендеринг дней, предоставив функцию dayRender. Например:.

$("#calendar").fullCalendar({
    dayRender: function (date, cell) {
        cell.css("background-color", "red");
    }
});

Документация для dayRender доступна здесь: http://arshaw.com/fullcalendar/docs/display/dayRender/

И вот рабочий пример по jsfiddle: http://jsfiddle.net/kvakulo/CYnJY/4/

Ответ 2

    dayRender: function(date, cell){
        if (moment().diff(date,'days') > 0){
            cell.css("background-color","silver");
        }
    },

Ответ 3

Для тех, кто хочет просто изменить цвет прошлых дат, укажите .fc-past в своем css и добавьте свойство background-color.. Например,

.fc-past {
    background-color: silver;
}

Ответ 4

Если кто-то хочет, чтобы jquery fullcalendar предыдущий весь день был красным (или любым другим), то это код.

    var $calendar = $('#calendar').fullCalendar({
    header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,basicWeek,basicDay'
    },

    defaultView: 'month',

    dayRender: function (date, cell) {
       var check = $.fullCalendar.formatDate(date,'yyyy-MM-dd');
                    var today = $.fullCalendar.formatDate(new Date(),'yyyy-MM-dd');
                    if (check < today) {
                        cell.css("background-color", "red");
                    }
    }
});

Код Регина Ларсена поможет мне добиться этого. Спасибо Регину Ларсену.

Ответ 5

Почему бы не использовать атрибут date-date?

$("#calendar").fullCalendar(function() {

  viewRender: function() {
    $("[data-date="+$.fullCalendar.formatDate(new Date(), "yyyy-MM-dd")+"]").css("background-color", "red");
},

....

Ответ 6

При работе с внешними библиотеками вы должны стараться не использовать все, что было создано библиотекой. Поскольку в следующей версии, если они меняют способ работы библиотеки внутри, библиотека по-прежнему будет обратно совместимой, но ваш код перестанет работать. Поэтому попробуйте использовать библиотечный API как можно больше, а не делать хаки.

Отвечая на ваш вопрос, одним из способов сделать это будет, добавьте новое событие во все дни, которые недоступны. Это можно сделать, создав объект события и сделав renderEvent (.fullCalendar('renderEvent', event [, stick])). При создании объекта события назначьте цвет фона в качестве цвета, который вы хотите, и установите цвет, цвет текста, цвет рамки так же, как и фон, если вы не хотите, чтобы он был видимым.

Изменить: Ответ Регина Ларсена кажется лучше. Я не заметил этого в документации.

Ответ 7

Сравнение с использованием параметра даты для определенного дня:

$("#calendar").fullCalendar({
    dayRender: function (date, cell) {
        if (date.isSame('2016-08-04')) {
           cell.css("background-color","red");
        }
    }
});

isSame происходит от момента .js, который используется fullcalendar: http://momentjs.com/docs/#/query/is-same/