changeStartDate () {
        let _self = this,
            datesToAdd = _self.clndr.options.extras.datesToAdd,
            datesToDel = _self.clndr.options.extras.datesToDel,
            newStartDate = _self.$startDateField.val().length ? _self.$startDateField.val() : _self.originalStartDate,
            newStartDateMoment = moment(newStartDate, _self.localeFormat);

        // Set the `selectedDate` to match the new start date
        _self.clndr.options.selectedDate = newStartDateMoment;

        // Make dates before the new start date inactive
        _self.clndr.options.constraints.startDate = moment(newStartDate, _self.localeFormat).format(_self.dateFormatInternal);
        
        // Navigate to the month/year for the new start date
        _self.clndr
            .setYear(newStartDateMoment.year())
            .setMonth(newStartDateMoment.month())
            .render();

        // Switch selected state styling from the old start date to the new one
        _self.$html.find('.selected').removeClass('selected');
        _self.$html.find('.calendar-day-' + _self.internalDate(newStartDate)).addClass('selected');

        // Remove now out-of-bounds dates from the datesToAdd array
        const outOfBoundsDatesToAdd = _self.clndr.options.extras.datesToAdd
            .filter(EventCalendar.isInYear.bind(this, newStartDateMoment))
            .filter(EventCalendar.isInMonth.bind(this, newStartDateMoment))
            .filter(EventCalendar.isBeforeDate.bind(this, newStartDateMoment));

        $.each(outOfBoundsDatesToAdd, function(k, v) {
            datesToAdd = datesToAdd.filter(EventCalendar.doesNotMatchDate.bind(this, v));
        });

        // Update stored datesToAdd with outOfBounds date removed
        _self.clndr.options.extras.datesToAdd = datesToAdd;

        // Remove now out-of-bounds dates from the datesToDel array
        const outOfBoundsDatesToDel = _self.clndr.options.extras.datesToDel
            .filter(EventCalendar.isInYear.bind(this, newStartDateMoment))
            .filter(EventCalendar.isInMonth.bind(this, newStartDateMoment))
            .filter(EventCalendar.isBeforeDate.bind(this, newStartDateMoment));

        $.each(outOfBoundsDatesToDel, function(k, v) {
            datesToDel = datesToDel.filter(EventCalendar.doesNotMatchDate.bind(this, v));
        });

        // Update stored datesToDel with outOfBounds date removed
        _self.clndr.options.extras.datesToDel = datesToDel;

        // Unset weekday checkboxes before applying the pattern
        _self.$html.find('[name="ercal-weekdays"]:checked').prop('checked', false);

        // If pattern is weekly, make sure the weekDay picker checks the correct weekday for the new start date
        _self.applyPattern();

        // Reset the endDateField `min` value to reflect the startDate value
        _self.setEndDateMinimum();

        // Update the review information to reflect changes to out-of-bound dates
        _self.updateReview();

        _self.paintMonth(_self.clndr.month);
    }
/**
     * Fired when the startDateField changes and re-renders the calendar to start at the new startDate, removes any
     * out-of-bounds dates from the datesToAdd / datesToDel arrays and repaints the month.
     * 
     * Clearing the startDateField will cause the calendar to be reset to the original start date.
     */
Fired when the startDateField changes and re-renders the calendar to start at the new startDate, removes any
out-of-bounds dates from the datesToAdd / datesToDel arrays and repaints the month.

Clearing the startDateField will cause the calendar to be reset to the original start date.
Fired when the startDateField changes and re - renders the calendar to start at the new startDate removes any out - of - bounds dates from the datesToAdd / datesToDel arrays and repaints the month . Clearing the startDateField will cause the calendar to be reset to the original start date .
changeStartDate () {
        let _self = this,
            datesToAdd = _self.clndr.options.extras.datesToAdd,
            datesToDel = _self.clndr.options.extras.datesToDel,
            newStartDate = _self.$startDateField.val().length ? _self.$startDateField.val() : _self.originalStartDate,
            newStartDateMoment = moment(newStartDate, _self.localeFormat);
        _self.clndr.options.selectedDate = newStartDateMoment;
        _self.clndr.options.constraints.startDate = moment(newStartDate, _self.localeFormat).format(_self.dateFormatInternal);
        _self.clndr
            .setYear(newStartDateMoment.year())
            .setMonth(newStartDateMoment.month())
            .render();
        _self.$html.find('.selected').removeClass('selected');
        _self.$html.find('.calendar-day-' + _self.internalDate(newStartDate)).addClass('selected');
        const outOfBoundsDatesToAdd = _self.clndr.options.extras.datesToAdd
            .filter(EventCalendar.isInYear.bind(this, newStartDateMoment))
            .filter(EventCalendar.isInMonth.bind(this, newStartDateMoment))
            .filter(EventCalendar.isBeforeDate.bind(this, newStartDateMoment));
        $.each(outOfBoundsDatesToAdd, function(k, v) {
            datesToAdd = datesToAdd.filter(EventCalendar.doesNotMatchDate.bind(this, v));
        });
        _self.clndr.options.extras.datesToAdd = datesToAdd;
        const outOfBoundsDatesToDel = _self.clndr.options.extras.datesToDel
            .filter(EventCalendar.isInYear.bind(this, newStartDateMoment))
            .filter(EventCalendar.isInMonth.bind(this, newStartDateMoment))
            .filter(EventCalendar.isBeforeDate.bind(this, newStartDateMoment));
        $.each(outOfBoundsDatesToDel, function(k, v) {
            datesToDel = datesToDel.filter(EventCalendar.doesNotMatchDate.bind(this, v));
        });
        _self.clndr.options.extras.datesToDel = datesToDel;
        _self.$html.find('[name="ercal-weekdays"]:checked').prop('checked', false);
        _self.applyPattern();
        _self.setEndDateMinimum();
        _self.updateReview();
        _self.paintMonth(_self.clndr.month);
    }
changeStartDate ( ) { let _self = this , datesToAdd = _self . clndr . options . extras . datesToAdd , datesToDel = _self . clndr . options . extras . datesToDel , newStartDate = _self . $startDateField . val ( ) . length ? _self . $startDateField . val ( ) : _self . originalStartDate , newStartDateMoment = moment ( newStartDate , _self . localeFormat ) ; _self . clndr . options . selectedDate = newStartDateMoment ; _self . clndr . options . constraints . startDate = moment ( newStartDate , _self . localeFormat ) . format ( _self . dateFormatInternal ) ; _self . clndr . setYear ( newStartDateMoment . year ( ) ) . setMonth ( newStartDateMoment . month ( ) ) . render ( ) ; _self . $html . find ( '.selected' ) . removeClass ( 'selected' ) ; _self . $html . find ( '.calendar-day-' + _self . internalDate ( newStartDate ) ) . addClass ( 'selected' ) ; const outOfBoundsDatesToAdd = _self . clndr . options . extras . datesToAdd . filter ( EventCalendar . isInYear . bind ( this , newStartDateMoment ) ) . filter ( EventCalendar . isInMonth . bind ( this , newStartDateMoment ) ) . filter ( EventCalendar . isBeforeDate . bind ( this , newStartDateMoment ) ) ; $ . each ( outOfBoundsDatesToAdd , function ( k , v ) { datesToAdd = datesToAdd . filter ( EventCalendar . doesNotMatchDate . bind ( this , v ) ) ; } ) ; _self . clndr . options . extras . datesToAdd = datesToAdd ; const outOfBoundsDatesToDel = _self . clndr . options . extras . datesToDel . filter ( EventCalendar . isInYear . bind ( this , newStartDateMoment ) ) . filter ( EventCalendar . isInMonth . bind ( this , newStartDateMoment ) ) . filter ( EventCalendar . isBeforeDate . bind ( this , newStartDateMoment ) ) ; $ . each ( outOfBoundsDatesToDel , function ( k , v ) { datesToDel = datesToDel . filter ( EventCalendar . doesNotMatchDate . bind ( this , v ) ) ; } ) ; _self . clndr . options . extras . datesToDel = datesToDel ; _self . $html . find ( '[name="ercal-weekdays"]:checked' ) . prop ( 'checked' , false ) ; _self . applyPattern ( ) ; _self . setEndDateMinimum ( ) ; _self . updateReview ( ) ; _self . paintMonth ( _self . clndr . month ) ; }
Fired when the startDateField changes and re-renders the calendar to start at the new startDate, removes any
 out-of-bounds dates from the datesToAdd / datesToDel arrays and repaints the month.
Fired when the startDateField changes and re - renders the calendar to start at the new startDate removes any out - of - bounds dates from the datesToAdd / datesToDel arrays and repaints the month .
// Set the `selectedDate` to match the new start date // Make dates before the new start date inactive // Navigate to the month/year for the new start date // Switch selected state styling from the old start date to the new one // Remove now out-of-bounds dates from the datesToAdd array // Update stored datesToAdd with outOfBounds date removed // Remove now out-of-bounds dates from the datesToDel array // Update stored datesToDel with outOfBounds date removed // Unset weekday checkboxes before applying the pattern // If pattern is weekly, make sure the weekDay picker checks the correct weekday for the new start date // Reset the endDateField `min` value to reflect the startDate value // Update the review information to reflect changes to out-of-bound dates