Tenho tentado encontrar uma solução para o meu problema Jquery ui datepicker e não estou tendo sorte. Aqui está o que estou tentando fazer ...
Eu tenho um aplicativo em que estou fazendo um PHP complexo para retornar uma matriz JSON de datas que desejo BLOQUEAR do Jquery UI Datepicker. Estou retornando este array:
["2013-03-14","2013-03-15","2013-03-16"]
Não há uma maneira simples de dizer simplesmente: bloquear essas datas do selecionador de data?
Eu li a documentação da IU e não vejo nada que me ajude. Alguém tem alguma ideia?
jquery-ui
jquery-ui-datepicker
Daniel White
fonte
fonte
Respostas:
Você pode usar beforeShowDay para fazer isso
O exemplo a seguir desativa as datas de 14 de março de 2013 a 16 de março de 2013
var array = ["2013-03-14","2013-03-15","2013-03-16"] $('input').datepicker({ beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); return [ array.indexOf(string) == -1 ] } });
Demo: Fiddle
fonte
return array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
O IE 8 não tem a função indexOf, então usei jQuery inArray.
$('input').datepicker({ beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); return [$.inArray(string, array) == -1]; } });
fonte
Se você também deseja bloquear domingos (ou outros dias), bem como a matriz de datas, uso este código:
jQuery(function($){ var disabledDays = [ "27-4-2016", "25-12-2016", "26-12-2016", "4-4-2017", "5-4-2017", "6-4-2017", "6-4-2016", "7-4-2017", "8-4-2017", "9-4-2017" ]; //replace these with the id's of your datepickers $("#id-of-first-datepicker,#id-of-second-datepicker").datepicker({ beforeShowDay: function(date){ var day = date.getDay(); var string = jQuery.datepicker.formatDate('d-m-yy', date); var isDisabled = ($.inArray(string, disabledDays) != -1); //day != 0 disables all Sundays return [day != 0 && !isDisabled]; } }); });
fonte
$('input').datepicker({ beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('yy-mm-dd', date); return [ array.indexOf(string) == -1 ] } });
fonte
beforeShowDate não funcionou para mim, então fui em frente e desenvolvi minha própria solução:
$('#embeded_calendar').datepicker({ minDate: date, localToday:datePlusOne, changeDate: true, changeMonth: true, changeYear: true, yearRange: "-120:+1", onSelect: function(selectedDateFormatted){ var selectedDate = $("#embeded_calendar").datepicker('getDate'); deactivateDates(selectedDate); } }); var excludedDates = [ "10-20-2017","10-21-2016", "11-21-2016"]; deactivateDates(new Date()); function deactivateDates(selectedDate){ setTimeout(function(){ var thisMonthExcludedDates = thisMonthDates(selectedDate); thisMonthExcludedDates = getDaysfromDate(thisMonthExcludedDates); var excludedTDs = page.find('td[data-handler="selectDay"]').filter(function(){ return $.inArray( $(this).text(), thisMonthExcludedDates) >= 0 }); excludedTDs.unbind('click').addClass('ui-datepicker-unselectable'); }, 10); } function thisMonthDates(date){ return $.grep( excludedDates, function( n){ var dateParts = n.split("-"); return dateParts[0] == date.getMonth() + 1 && dateParts[2] == date.getYear() + 1900; }); } function getDaysfromDate(datesArray){ return $.map( datesArray, function( n){ return n.split("-")[1]; }); }
fonte
Para DD-MM-AA use este código:
var array = ["03-03-2017 ', '03 -10-2017', '03 -25-2017"]
$('#datepicker').datepicker({ beforeShowDay: function(date){ var string = jQuery.datepicker.formatDate('dd-mm-yy', date); return [ array.indexOf(string) == -1 ] } }); function highlightDays(date) { for (var i = 0; i < dates.length; i++) { if (new Date(dates[i]).toString() == date.toString()) { return [true, 'highlight']; } } return [true, '']; }
fonte
Se você deseja desabilitar determinada (s) data (s) no jquery datepicker, aqui está uma demonstração simples para você.
<script type="text/javascript"> var arrDisabledDates = {}; arrDisabledDates[new Date("08/28/2017")] = new Date("08/28/2017"); arrDisabledDates[new Date("12/23/2017")] = new Date("12/23/2017"); $(".datepicker").datepicker({ dateFormat: "dd/mm/yy", beforeShowDay: function (date) { var day = date.getDay(), bDisable = arrDisabledDates[date]; if (bDisable) return [false, "", ""] } }); </script>
fonte