Jquery UI datepicker. 날짜 배열 비활성화


84

내 Jquery ui datepicker 문제에 대한 해결책을 찾으려고 노력했지만 운이 없습니다. 내가하려는 것은 ...

Jquery UI Datepicker에서 차단하려는 JSON 배열을 반환하기 위해 복잡한 PHP를 수행하는 응용 프로그램이 있습니다. 이 배열을 반환합니다.

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

간단히 말할 수있는 간단한 방법이 없습니까? datepicker에서 이러한 날짜를 차단합니까?

UI 설명서를 읽었는데 도움이되는 내용이 없습니다. 누구나 아이디어가 있습니까?






누군가 저에게 비슷한 질문을했지만 Materialise datepicker를 사용할 수 있습니까?
naz786

답변:


208

beforeShowDay 를 사용 하여이 작업 을 수행 할 수 있습니다.

다음 예제는 2013 년 3 월 14 일부터 2013 년 3 월 16 일까지 날짜를 비활성화합니다.

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

데모 : Fiddle


1
나는 당신이 그것으로 어디로 가는지 봅니다. 그래도 날짜 배열을 어떻게 통합 할 수 있습니까?
다니엘 화이트

14
와. 당신은 굉장한 천재 형제입니다. 나는 이것이 백만 번 요청 된 이후 로이 질문에 대한 스택 오버플로 게시물에 아직없는 이유를 모르겠습니다. 위에 게시 된 모든 예제는 너무 복잡합니다. 이것은 훌륭하고 간단합니다. 별 5 개. 감사.
다니엘 화이트

나는 코드 jqueryui.com/download/…를 다운로드 했지만 위의 코드를 통합 할 때 작동하지 않는 pls 도움말
Sam

하나의 찬성만으로는 충분하지 않습니다. 어떤 사람들은 필요 이상으로 일을 복잡하게 만듭니다. 간단하고 작동하는 스 니펫에 감사드립니다. 매우 유용한.
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 2014-08-11

3
IE8은 WinXP (SP3)에서 실행되는 최신 IE 브라우저이기 때문입니다.
JosephK

그러나 해당 문자열에서 하위 문자열의 위치를 ​​찾기 위해 문자열에서 indexOf () 함수를 지원합니다.
Wezy 2015 년

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에서 이와 동일한 작업을 수행 할 수 있습니까 ??
Sunil Rawat 2017

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

daterangepicker가 가능합니까? date-range-picker에서 날짜 배열을 비활성화하고 싶습니까 ??
Sunil Rawat

질문을 정의 해 주시겠습니까?
Dierig Patrick 2017 년

날짜 범위 선택기가 2017 년 1 월 1 일-2017 년 3 월 31 일이라고 가정합니다. 이 범위 사이의 맞춤 날짜 배열로 일부 날짜를 강조 표시하고 싶습니다. 날짜 범위 달력에서. $ dates = ['02 / 01 / 2017 ','03/01/2017 '...까지]이 날짜. 가능합니까?
Sunil Rawat

날짜 선택기에서 우리가 사용할 수있는 것처럼이 목적을 위해 beforeShowDay 기능, 날짜 범위 피커 무엇있다 : daterangepicker.com
선일 Rawat

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>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.