jquery UI datepicker ปิดการใช้งานอาร์เรย์ของวันที่


84

ฉันพยายามค้นหาวิธีแก้ปัญหา Jquery ui datepicker ของฉันและฉันไม่มีโชค นี่คือสิ่งที่ฉันกำลังพยายามทำ ...

ฉันมีแอปพลิเคชันที่ฉันกำลังทำ PHP ที่ซับซ้อนเพื่อส่งคืนอาร์เรย์ JSON ของวันที่ที่ฉันต้องการให้ BLOCKED ออกจาก Jquery UI Datepicker ฉันกำลังส่งคืนอาร์เรย์นี้:

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

ไม่มีวิธีง่ายๆในการพูดว่า: บล็อกวันที่เหล่านี้จาก datepicker หรือไม่?

ฉันได้อ่านเอกสาร UI และไม่เห็นอะไรที่ช่วยฉันได้ ใครมีไอเดียบ้าง






มีใครสามารถบอกฉันด้วยคำถามที่คล้ายกัน แต่ใช้ Materialize datepicker ได้ไหม
naz786

คำตอบ:


209

คุณสามารถใช้beforeShowDayเพื่อทำสิ่งนี้

ตัวอย่างต่อไปนี้ปิดใช้งานวันที่ 14 มีนาคม 2556 ถึง 16 มีนาคม 2556

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
ฉันเห็นว่าคุณกำลังจะไปที่ไหน ฉันจะรวมอาร์เรย์ของวันที่ได้อย่างไร
Daniel White

14
ว้าว. คุณเป็นอัจฉริยะที่บ้าคลั่ง ฉันไม่รู้ว่าเหตุใดสิ่งนี้จึงไม่อยู่ในโพสต์สแตกล้นสำหรับคำถามนี้เนื่องจากถูกถามเป็นล้านครั้ง ตัวอย่างทั้งหมดที่โพสต์ข้างต้นซับซ้อนเกินไปนี่เป็นสิ่งที่ดีและเรียบง่าย 5 ดาว. ขอบคุณ.
Daniel White

ฉันได้ดาวน์โหลดรหัส 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 () บนสตริงเพื่อค้นหาตำแหน่งของสตริงย่อยในสตริงนั้น
Wezy

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

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

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 ฉันต้องการปิดการใช้งานอาร์เรย์ของวันที่ในตัวเลือกช่วงวันที่?
Sunil Rawat

คุณช่วยกำหนดคำถามของคุณได้ไหม
Dierig Patrick

ฉันมีเครื่องมือเลือกช่วงวันที่สมมติว่า: 01/01/2017 - 31/03/2017 ฉันต้องการเน้นวันที่บางวันซึ่งเป็นวันที่ที่กำหนดเองระหว่างช่วงนี้ ในปฏิทินช่วงวันที่ $ วันที่ = ['02 / 01/2017','03/01/2017'... จนถึง] วันที่เหล่านี้ เป็นไปได้ไหม?
Sunil Rawat

เช่นเดียวกับใน datepicker เราสามารถใช้ฟังก์ชัน beforeShowDay เพื่อจุดประสงค์นี้มีอะไรบ้างในตัวเลือกช่วงวันที่: 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.