jQuery(function ($) { var datepickerDict = {}; var isBootstrap4 = $.fn.collapse.Constructor.VERSION.split('.').shift() == "4"; function fixMonthEndDate(e, picker) { e.date && picker.val().length && picker.val(e.date.endOf('month').format('YYYY-MM-DD')); } $("[dp_config]:not([disabled])").each(function (i, element) { var $element = $(element), data = {}; try { data = JSON.parse($element.attr('dp_config')); } catch (x) { } if (data.id && data.options) { data.$element = $element.datetimepicker(data.options); data.datepickerdata = $element.data("DateTimePicker"); datepickerDict[data.id] = data; data.$element.next('.input-group-addon').on('click', function(){ data.datepickerdata.show(); }); if(isBootstrap4){ data.$element.on("dp.show", function (e) { $('.collapse.in').addClass('show'); }); } } }); $.each(datepickerDict, function (id, to_picker) { if (to_picker.linked_to) { var from_picker = datepickerDict[to_picker.linked_to]; from_picker.datepickerdata.maxDate(to_picker.datepickerdata.date() || false); to_picker.datepickerdata.minDate(from_picker.datepickerdata.date() || false); from_picker.$element.on("dp.change", function (e) { to_picker.datepickerdata.minDate(e.date || false); }); to_picker.$element.on("dp.change", function (e) { if (to_picker.picker_type == 'MONTH') fixMonthEndDate(e, to_picker.$element); from_picker.datepickerdata.maxDate(e.date || false); }); if (to_picker.picker_type == 'MONTH') { to_picker.$element.on("dp.hide", function (e) { fixMonthEndDate(e, to_picker.$element); }); fixMonthEndDate({ date: to_picker.datepickerdata.date() }, to_picker.$element); } } }); if(isBootstrap4) { $('body').on('show.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){ $(e.target).addClass('in'); }); $('body').on('hidden.bs.collapse','.bootstrap-datetimepicker-widget .collapse',function(e){ $(e.target).removeClass('in'); }); } });