Header and Footer Template

The headers hold key information like the date, day of the week and in some cases it also holds the full date. Whenever you need to show extra information, or if you would like to change the styling or date format, time format you can use the various header templates, depending on the view configuration. You can also show a footer element, for displaying more information.

Add summaries, statistics or simply color the background depending on the number events that occur on that specific day, like in this example.

Check out how you can customize the date header for the scheduler  Let's go →
Download and try example

Demo

Hourly header/footer template

With an hourly (or sub-hourly) resolution the renderHour and renderHourFooter options can be used for customizing the header and footer.

html<div id="my-timeline" class="md-date-header-template"></div>
jsmobiscroll.eventcalendar('#my-timeline', {
    view: {
        timeline: {
            type: 'day'
        }
    },
    renderHour: function (args) {
        var date = args.date;
        var formatDate = mobiscroll.formatDate;
        var eventOccurrence = 'none';

        if (args.events) {
            var eventNr = args.events.length;
            if (eventNr === 0) {
                eventOccurrence = 'none';
            } else if (eventNr === 1) {
                eventOccurrence = 'one';
            } else if (eventNr < 4) {
                eventOccurrence = 'few';
            } else {
                eventOccurrence = 'more';
            }
        }

        return '<div class="md-date-header-hour md-date-header-events-' + eventOccurrence + '">'
            + formatDate('h:mm A', date) + '</div>';
    },
    renderHourFooter: function (args) {
        var events = args.events;
        var occuppancy = 0;

        if (events) {
            var resourceIds = [];
            var nr = 0;
            for (var i = 0; i < events.length; ++i) {
                var event = events[i];
                if (resourceIds.indexOf(event.resource) < 0) {
                    nr++;
                    resourceIds.push(event.resource);
                }
            }
            occuppancy = (nr * 100 / myResources.length).toFixed(0);
        }

        return '<div class="md-date-footer">' + occuppancy + '%'</div>';
    }
});
css.md-date-header-hour {
    font-size: 12px;
    font-weight: 600;
    text-align: center;
    line-height: 20px;
    border-radius: 8px;
    margin: 3px;
    color: #000;
}

.md-date-header-events-one {
    background: #e9f5e4;
}

.md-date-header-events-few {
    background: #d0e3c6;
}

.md-date-header-events-more {
    background: #8ca77e;
}

.md-date-footer {
    font-size: 14px;
    font-weight: 600;
    text-align: center;
    line-height: 26px;
}
Daily header/footer template

With a daily resolution, the renderTimelineDay and renderDayFooter options can come in handy for customizing the header and footer.

html<div id="my-timeline" class="md-date-header-template"></div>
jsmobiscroll.eventcalendar('#my-timeline', {
    view: {
        timeline: {
            type: 'month'
        }
    },
    renderTimelineDay: function (args) {
        var date = args.date;
        var formatDate = mobiscroll.formatDate;
        var eventOccurrence = 'none';

        if (args.events) {
            var eventNr = args.events.length;
            if (eventNr === 0) {
                eventOccurrence = 'none';
            } else if (eventNr === 1) {
                eventOccurrence = 'one';
            } else if (eventNr < 4) {
                eventOccurrence = 'few';
            } else {
                eventOccurrence = 'more';
            }
        }
                    
        return '<div class="md-date-header md-date-header-day md-date-header-events-' + eventOccurrence + '">' +
            '<div class="md-date-header-day-name">' + formatDate('DDD', date) + '</div>' +
            '<div class="md-date-header-day-nr">' + formatDate('DD', date) + '</div></div>';
    },
    renderDayFooter: function (args) {
        var occuppancy = 0;

        if (events) {
            var resourceIds = [];
            var nr = 0;
            for (var i = 0; i < events.length; ++i) {
                var event = events[i];
                if (resourceIds.indexOf(event.resource) < 0) {
                    nr++;
                    resourceIds.push(event.resource);
                }
            }
            occuppancy = (nr * 100 / myResources.length).toFixed(0);
        }

        return '<div class="md-date-footer">' + occuppancy + '%</div>';
    }
});
css.md-date-header-day {
    text-align: center;
    line-height: 20px;
    border-radius: 8px;
    margin: 4px;
}

.md-date-header-day-name {
    font-size: 13px;
    font-weight: 600;
}

.md-date-header-day-nr {
    font-size: 14px;
}

.md-date-header-events-one {
    background: #e9f5e4;
}

.md-date-header-events-few {
    background: #d0e3c6;
}

.md-date-header-events-more {
    background: #8ca77e;
}

.md-date-footer {
    font-size: 14px;
    font-weight: 600;
    text-align: center;
    line-height: 26px;
}
Weekly header/footer template

When the resolution is weekly, the renderWeek and renderWeekFooter options can be used.

html<div id="my-timeline" class="md-date-header-template"></div>
jsmobiscroll.eventcalendar('#my-timeline', {
    view: {
        timeline: {
            type: 'week',
            resolutionHorizontal: 'week',
            size: 6
        }
    },
    renderWeek: function (args) {
        var date = args.date;
        var formatDate = mobiscroll.formatDate;
        var eventOccurrence = 'none';

        if (args.events) {
            var eventNr = args.events.length;
            if (eventNr === 0) {
                eventOccurrence = 'none';
            } else if (eventNr === 1) {
                eventOccurrence = 'one';
            } else if (eventNr < 4) {
                eventOccurrence = 'few';
            } else {
                eventOccurrence = 'more';
            }
        }

        return '<div class="md-date-header-week md-date-header-events-' + eventOccurrence + '">' +
            formatDate('MMM DD', args.startDate) + ' - ' + formatDate('MMM DD', args.endDate) + '</div></div>';
    },
    renderWeekFooter: function (args) {
        var occuppancy = 0;

        if (events) {
            var resourceIds = [];
            var nr = 0;
            for (var i = 0; i < events.length; ++i) {
                var event = events[i];
                if (resourceIds.indexOf(event.resource) < 0) {
                    nr++;
                    resourceIds.push(event.resource);
                }
            }
            occuppancy = (nr * 100 / myResources.length).toFixed(0);
        }

        return '<div class="md-date-footer">' + occuppancy + '%</div>';
    }
});
css.md-date-header-template .mbsc-timeline-header-week-text {
    display: block;
}

.md-date-header-template .mbsc-timeline-footer-week {
    text-align: center;
}

.md-date-header-week {
	text-align: center;
	font-weight: 600;
	color: initial;
	line-height: 20px;
	border-radius: 8px;
	margin: 3px;
}

.md-date-header-events-one {
	background: #e9f5e4;
}

.md-date-header-events-few {
	background: #d0e3c6;
}

.md-date-header-events-more {
	background: #8ca77e;
}

.md-date-footer {
	font-size: 14px;
	font-weight: 600;
	text-align: center;
	line-height: 26px;
}
Monthly header/footer template

When displaying multiple months, the renderMonth and renderMonthFooter options can be used for customizing the header and footer per month.

html<div id="my-timeline" class="md-date-header-template"></div>
jsmobiscroll.eventcalendar('#my-timeline', {

    view: {
        timeline: {
            type: 'month',
            resolutionHorizontal: 'month',
            size: 6
        }
    },
    renderMonth: function (args) {
        var date = args.date;
        var formatDate = mobiscroll.formatDate;
        var eventOccurrence = 'none';

        if (args.events) {
            var eventNr = args.events.length;
            if (eventNr === 0) {
                eventOccurrence = 'none';
            } else if (eventNr === 1) {
                eventOccurrence = 'one';
            } else if (eventNr < 4) {
                eventOccurrence = 'few';
            } else {
                eventOccurrence = 'more';
            }
        }

        return '<div class="md-date-header-month md-date-header-events-' + eventOccurrence + '">' +
            formatDate('MMM', date) + '</div>';
    },
    renderMonthFooter: function (args) {
        var occuppancy = 0;

        if (events) {
            var resourceIds = [];
            var nr = 0;
            for (var i = 0; i < events.length; ++i) {
                var event = events[i];
                if (resourceIds.indexOf(event.resource) < 0) {
                    nr++;
                    resourceIds.push(event.resource);
                }
            }
            occuppancy = (nr * 100 / myResources.length).toFixed(0);
        }

        return '<div class="md-date-footer">' + occuppancy + '%</div>';
    }
});
css.md-date-header-month {
	text-align: center;
	font-weight: 600;
	color: initial;
	line-height: 20px;
	border-radius: 8px;
	margin: 3px;
}

.md-date-header-events-one {
	background: #e9f5e4;
}

.md-date-header-events-few {
	background: #d0e3c6;
}

.md-date-header-events-more {
	background: #8ca77e;
}

.md-date-footer {
	font-size: 14px;
	font-weight: 600;
	text-align: center;
	line-height: 26px;
}
Quarter header/footer template

When displaying multiple quarters, the renderQuarter and renderQuarterFooter options can be used for customizing the header and footer per quarter.

html<div id="my-timeline" class="md-date-header-template"></div>
jsmobiscroll.eventcalendar('#my-timeline', {

    view: {
        timeline: {
            type: 'year',
            resolutionHorizontal: 'quarter',
            size: 1
        }
    },
    renderQuarter: function (args) {
        var date = args.date;
        var formatDate = mobiscroll.formatDate;
        var eventOccurrence = 'none';

        if (args.events) {
            var eventNr = args.events.length;
            if (eventNr === 0) {
                eventOccurrence = 'none';
            } else if (eventNr === 1) {
                eventOccurrence = 'one';
            } else if (eventNr < 4) {
                eventOccurrence = 'few';
            } else {
                eventOccurrence = 'more';
            }
        }

        return '<div class="md-date-header-quarter md-date-header-events-' + eventOccurrence + '">Quarter ' +
            (date.getMonth() / 3 + 1) + '</div>';
    },
    renderQuarterFooter: function (args) {
        var occuppancy = 0;

        if (events) {
            var resourceIds = [];
            var nr = 0;
            for (var i = 0; i < events.length; ++i) {
                var event = events[i];
                if (resourceIds.indexOf(event.resource) < 0) {
                    nr++;
                    resourceIds.push(event.resource);
                }
            }
            occuppancy = (nr * 100 / myResources.length).toFixed(0);
        }

        return '<div class="md-date-footer">' + occuppancy + '%</div>';
    }
});
css.md-date-header-quarter {
	text-align: center;
	font-weight: 600;
	color: initial;
	line-height: 20px;
	border-radius: 8px;
	margin: 3px;
}

.md-date-header-events-one {
	background: #e9f5e4;
}

.md-date-header-events-few {
	background: #d0e3c6;
}

.md-date-header-events-more {
	background: #8ca77e;
}

.md-date-footer {
	font-size: 14px;
	font-weight: 600;
	text-align: center;
	line-height: 26px;
}
Yearly header/footer template

With a yearly resolution, the renderYear and renderYearFooter options can be used for customizing the header and footer.

html<div id="my-timeline" class="md-date-header-template"></div>
jsmobiscroll.eventcalendar('#my-timeline', {
    view: {
        timeline: {
            type: 'year',
            resolutionHorizontal: 'year',
            size: 6
        }
    },
    renderYear: function (args) {
        var date = args.date;
        var formatDate = mobiscroll.formatDate;
        var eventOccurrence = 'none';

        if (args.events) {
            var eventNr = args.events.length;
            if (eventNr === 0) {
                eventOccurrence = 'none';
            } else if (eventNr === 1) {
                eventOccurrence = 'one';
            } else if (eventNr < 4) {
                eventOccurrence = 'few';
            } else {
                eventOccurrence = 'more';
            }
        }

        return '<div class="md-date-header-year md-date-header-events-' + eventOccurrence + '">' +
            formatDate('YYYY', date) + '</div>';
    },
    renderYearFooter: function (args) {
        var occuppancy = 0;

        if (events) {
            var resourceIds = [];
            var nr = 0;
            for (var i = 0; i < events.length; ++i) {
                var event = events[i];
                if (resourceIds.indexOf(event.resource) < 0) {
                    nr++;
                    resourceIds.push(event.resource);
                }
            }
            occuppancy = (nr * 100 / myResources.length).toFixed(0);
        }

        return '<div class="md-date-footer">' + occuppancy + '%</div>';
    }
});
Customize time-scale headers and add occupancy footers to a Timeline — format cells from hour to year and display per-slot utilization.

Duplicate Session

You have signed in on a different machine. To keep everything in sync, you have been signed out of this session.

If you need to invite team members, manage seats and accounts you can do it from the licenses page.

Duplicate Session

We noticed you are logged in on a different machine and have closed your old session.

If you need to invite team members, manage seats and accounts you can do it from the licenses page.