JqueryUIの日付ピッカー。日付の配列を無効にする


84

Jquery ui datepickerの問題の解決策を探していましたが、うまくいきませんでした。これが私がやろうとしていることです...

Jquery UIDatepickerからブロックしたい日付のJSON配列を返すために複雑なPHPを実行しているアプリケーションがあります。私はこの配列を返します:

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

簡単に言う方法はありません:日付ピッカーからこれらの日付をブロックしますか?

UIのドキュメントを読みましたが、何も役に立ちません。誰かアイデアはありますか?






誰かが私に同様の質問への道標を示しますが、Materialize datepickerを使用できますか?
naz7 8618年

回答:


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

デモ:フィドル


1
私はあなたがそれでどこに行くのか見ています。ただし、日付の配列をどのように組み込むのでしょうか。
ダニエルホワイト

14
ワオ。あなたはおかしな天才仲間です。何百万回も質問されているので、なぜこれがこの質問のスタックオーバーフロー投稿に含まれていないのかわかりません。上に投稿されたすべての例は複雑すぎます、これは素晴らしくて単純です。5つ星。ありがとう。
ダニエルホワイト

コードjqueryui.com/download/をダウンロードし ましたが、上記のコードを統合すると、plsヘルプが機能しません
Sam

1つの賛成票では不十分です。一部の人々は、物事を必要以上に複雑にします。シンプルで機能するスニペットをありがとうございます。非常に便利。
0112 2014年

4
あなたはまた、これらのカスタム日付のほか、週末を除外する場合は、このことにより、リターンラインを置き換えますreturn array.indexOf(string) != -1 ? [false] : $.datepicker.noWeekends(date);
パブロSGパチェコ

20

IE 8にはindexOf関数がないため、代わりにjQueryinArrayを使用しました。

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

6
@ChristopherStrydomまだ多くの人が使っていることに驚かれることでしょう。
2014

3
これは、IE8がWinXP(SP3)で実行される最新のIEブラウザーであるためです。
JosephK 2014

ただし、文字列内の部分文字列の位置を検索するために、文字列の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 2017

質問を定義していただけますか?
Dierig Patrick 2017

私は日付範囲ピッカーを想定しています:2017年1月1日-2017年3月31日。この範囲の間のカスタム日付の配列のいくつかの日付を強調表示したいと思います。日付範囲カレンダー。$ days = ['02 / 01/2017 '、' 03/01/2017 '... till]これらの日付。可能ですか?
Sunil Rawat 2017年

datepickerのように、この目的で:beforeShowDay関数を使用できます。date-range-pickerには何がありますか:daterangepicker.com
Sunil 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.