Вибір дати інтерфейсу користувача Jquery. Вимкнути масив Дат


84

Я намагався знайти рішення моєї проблеми Jpery ui datepicker, і мені не пощастило. Ось що я намагаюся зробити ...

У мене є програма, де я роблю якийсь складний PHP, щоб повернути масив дат JSON, які я хочу ЗАБЛОКУВАТИ із Jquery UI Datepicker. Я повертаю цей масив:

["2013-03-14","2013-03-15","2013-03-16"]

Чи не існує простого способу просто сказати: заблокувати ці дати з датчика?

Я прочитав документацію щодо інтерфейсу користувача і не бачу нічого, що мені допомагає. У когось є ідеї?






Хтось може підказати мені подібні запитання, але використовуючи Materialize datepicker?
naz786

Відповіді:


208

Ви можете використовувати beforeShowDay для цього

Наступний приклад вимикає дати з 14 березня 2013 року по 16 березня 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 ]
    }
});

Демо: Скрипка


1
Я напевно бачу, куди ти з цим йдеш. Як би я включив свій масив дат, хоча.
Даніель Вайт

14
ОГО. Ти дивний геній, брате. Я не знаю, чому цього питання ще немає в повідомленнях про переповнення стека для цього питання, оскільки його задавали мільйон разів. Всі приклади, розміщені вище, занадто складні, це приємно і просто. 5 зірок. Дякую.
Даніель Уайт

я завантажив код jqueryui.com/download/…, але коли я інтегрую вищевказаний код, його не працює, будь ласка, допоможіть
Сем

Одного голосу «за» недостатньо. Деякі люди роблять все набагато складніше, ніж потрібно. Щиро дякую за простий, робочий фрагмент. Дуже корисний.
0112,

4
Якщо ви також хочете виключити вихідні, окрім цих спеціальних дат, замініть зворотний рядок таким:return array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
Pablo SG Pacheco

20

IE 8 не має функції indexOf, тому я використав натомість jQuery inArray.

$('input').datepicker({
    beforeShowDay: function(date){
        var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
        return [$.inArray(string, array) == -1];
    }
});

6
@ChristopherStrydom, ти здивуєшся, як багато людей все ще ним користуються.
euther

3
Це тому, що IE8 - це найновіший браузер IE, який буде працювати на WinXP (SP3).
JosephK

Однак він підтримує функцію indexOf () у рядку для пошуку позиції підрядка в цьому рядку.
Везі

9

Якщо ви також хочете заблокувати неділю (або інші дні), а також масив дат, я використовую цей код:

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];
      }
   });
});   

1
$('input').datepicker({
   beforeShowDay: function(date){
       var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
       return [ array.indexOf(string) == -1 ]
   }
});

1

beforeShowDate у мене не працював, тому я продовжив розробляти власне рішення:

$('#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]; 
                });
             }

Чи можемо ми зробити те саме на dateRangePicker ??
Суніл Рават,

1

Для DD-MM-YY використовуйте такий код:

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, ''];
}

Чи можливо для вибору діапазону дат, я хочу відключити масив дат у засобі вибору діапазону дат ??
Суніл Рават,

Ви можете визначити своє запитання?
Дієріг Патрік,

У мене є інструмент вибору діапазону дат: 01.01.2017 - 31.03.2017. Я хочу виділити деякі дати масивом власних дат між цим діапазоном. за календарем діапазону дат. $ date = ['02 /01/2017','03/01/2017'...till] ці дати. це можливо?
Суніл Рават,

як у datepicker, ми можемо використовувати для цього функцію: beforeShowDay, що є у засобі вибору діапазону дат
Суніл Рават,

1

Якщо ви хочете відключити певні дати в jquery datepicker, то ось вам проста демонстрація.

<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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.