क्या शनिवार और रविवार (और छुट्टियों) को निष्क्रिय करने के लिए jQuery UI डेटपिकर बनाया जा सकता है?


193

मैं अपॉइंटमेंट डे चुनने के लिए एक डेटपिकर का उपयोग करता हूं। मैंने पहले से ही अगले महीने के लिए तारीख सीमा निर्धारित की है। यह ठीक काम करता है। मैं उपलब्ध विकल्पों में से शनिवार और रविवार को बाहर करना चाहता हूं। क्या यह किया जा सकता है? यदि हां, तो कैसे?

जवाबों:


243

एक beforeShowDayविकल्प है, जो प्रत्येक तिथि के लिए बुलाए जाने के लिए एक फ़ंक्शन लेता है, यह सच है कि यदि तारीख की अनुमति है या गलत है यदि यह नहीं है। डॉक्स से:


beforeShowDay

समारोह एक पैरामीटर के रूप में एक तिथि लेता है और साथ [0] सही / गलत के बराबर का संकेत है या नहीं, इस तिथि चयन है और एक सरणी लौटना चाहिए 1 डिफ़ॉल्ट प्रस्तुति के लिए एक CSS वर्ग नाम (एस) या '' के बराबर। इसे प्रदर्शित करने से पहले इसे प्रत्येक दिन डेटापिक में बुलाया जाता है।

डेटकिकर में कुछ राष्ट्रीय अवकाश प्रदर्शित करें।

$(".selector").datepicker({ beforeShowDay: nationalDays})   

natDays = [
  [1, 26, 'au'], [2, 6, 'nz'], [3, 17, 'ie'],
  [4, 27, 'za'], [5, 25, 'ar'], [6, 6, 'se'],
  [7, 4, 'us'], [8, 17, 'id'], [9, 7, 'br'],
  [10, 1, 'cn'], [11, 22, 'lb'], [12, 12, 'ke']
];

function nationalDays(date) {
    for (i = 0; i < natDays.length; i++) {
      if (date.getMonth() == natDays[i][0] - 1
          && date.getDate() == natDays[i][1]) {
        return [false, natDays[i][2] + '_day'];
      }
    }
  return [true, ''];
}

फ़ंक्शन में बनाया गया एक मौजूद है, जिसे noWeekends कहा जाता है, जो सप्ताहांत के दिनों के चयन को रोकता है।

$(".selector").datepicker({ beforeShowDay: $.datepicker.noWeekends })

दोनों को मिलाने के लिए, आप कुछ ऐसा कर सकते हैं ( nationalDaysऊपर से फ़ंक्शन मानकर ):

$(".selector").datepicker({ beforeShowDay: noWeekendsOrHolidays})   

function noWeekendsOrHolidays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
    if (noWeekend[0]) {
        return nationalDays(date);
    } else {
        return noWeekend;
    }
}

अद्यतन : ध्यान दें कि jQuery के यूआई 1.8.19 के रूप में, पहले वाला ShowDay विकल्प भी एक वैकल्पिक तीसरा paremeter, एक पॉपअप टूलटिप स्वीकार करता है


2
इसके लिए धन्यवाद, डॉक्स में कहीं भी यह विधि नहीं मिल सकती है।
नील ऐटकन

2
उत्कृष्ट समाधान। विशेष रूप से आपकी व्याख्या कितनी संक्षिप्त है। @ नील: dev.jqueryui.com/ticket/5851
कौशिक गोपाल

इसके साथ ही मुझे Uncaught TypeError: Cannot read property 'noWeekends' of undefinedराष्ट्रीय दिवस समारोह की उम्मीद के
मुताबिक

यदि आपने इसे पहले ही इंस्टेंट कर दिया है, तो आप विकल्प को अपडेट कर सकते हैं: $ ('# चयनकर्ता')। datepicker ('विकल्प', 'पहलेShowDay', $ .datepicker.noWeekends);
Marcaum54

42

यदि आप सप्ताहांत को बिल्कुल नहीं दिखाना चाहते हैं, तो बस:

सीएसएस

th.ui-datepicker-week-end,
td.ui-datepicker-week-end {
    display: none;
}

1
दिनों को पूरी तरह से छिपाने के लिए लेकिन हेडर और रिक्त स्थान दिखाएं:td.ui-datepicker-week-end { visibility: hidden; }
वेल विक्टस

सप्ताहांत को बाहर करने के लिए यह एक बहुत साफ तरीका है।
itsdarrylnorris

धन्यवाद, बहुत अच्छा :)
फॉक्स

26

ये उत्तर बहुत मददगार थे। धन्यवाद।

नीचे मेरा योगदान एक सरणी जोड़ता है जहां कई दिन झूठे वापस आ सकते हैं (हम हर मंगलवार, बुधवार और गुरुवार को बंद होते हैं)। और मैंने विशिष्ट तिथियों और वर्षों के नो-वीकेंड्स को बंडल किया।

यदि आप सप्ताहांत चाहते हैं, तो [शनिवार], [रविवार] को बंद करें सरणी में जोड़ें।

$(document).ready(function(){

    $("#datepicker").datepicker({
        beforeShowDay: nonWorkingDates,
        numberOfMonths: 1,
        minDate: '05/01/09',
        maxDate: '+2M',
        firstDay: 1
    });

    function nonWorkingDates(date){
        var day = date.getDay(), Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6;
        var closedDates = [[7, 29, 2009], [8, 25, 2010]];
        var closedDays = [[Monday], [Tuesday]];
        for (var i = 0; i < closedDays.length; i++) {
            if (day == closedDays[i][0]) {
                return [false];
            }

        }

        for (i = 0; i < closedDates.length; i++) {
            if (date.getMonth() == closedDates[i][0] - 1 &&
            date.getDate() == closedDates[i][1] &&
            date.getFullYear() == closedDates[i][2]) {
                return [false];
            }
        }

        return [true];
    }




});

3
आप बस एक नया पोस्ट करने के बजाय अपने पुराने उत्तर को संपादित कर सकते हैं - दोनों को एक ही उत्तर में शामिल करें, यह देखते हुए कि वे समान कैसे हैं, या बस पुराने को हटा दें और बेहतर संस्करण छोड़ दें
यी जियांग


13

यहाँ समाधान है कि हर कोई पसंद करता है बहुत तीव्र लगता है ... व्यक्तिगत रूप से मुझे लगता है कि ऐसा करना बहुत आसान है:

       var holidays = ["12/24/2012", "12/25/2012", "1/1/2013", 
            "5/27/2013", "7/4/2013", "9/2/2013", "11/28/2013", 
            "11/29/2013", "12/24/2013", "12/25/2013"];

       $( "#requestShipDate" ).datepicker({
            beforeShowDay: function(date){
                show = true;
                if(date.getDay() == 0 || date.getDay() == 6){show = false;}//No Weekends
                for (var i = 0; i < holidays.length; i++) {
                    if (new Date(holidays[i]).toString() == date.toString()) {show = false;}//No Holidays
                }
                var display = [show,'',(show)?'':'No Weekends or Holidays'];//With Fancy hover tooltip!
                return display;
            }
        });

इस तरह आपकी तिथियां मानव पठनीय हैं। यह वास्तव में अलग नहीं है कि यह मेरे लिए इस तरह से अधिक समझ में आता है।


6

कोड का यह संस्करण आपको sql डेटाबेस से छुट्टी की तारीखों को प्राप्त करने और UI Datepicker में निर्दिष्ट दिनांक को अक्षम करने के लिए बना देगा


$(document).ready(function (){
  var holiDays = (function () {
    var val = null;
    $.ajax({
        'async': false,
        'global': false,
        'url': 'getdate.php',
        'success': function (data) {
            val = data;
        }
    });
    return val;
    })();
  var natDays = holiDays.split('');

  function nationalDays(date) {
    var m = date.getMonth();
    var d = date.getDate();
    var y = date.getFullYear();

    for (var i = 0; i  natDays.length-1; i++) {
    var myDate = new Date(natDays[i]);
      if ((m == (myDate.getMonth())) && (d == (myDate.getDate())) && (y == (myDate.getFullYear())))
      {
        return [false];
      }
    }
    return [true];
  }

  function noWeekendsOrHolidays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
      if (noWeekend[0]) {
        return nationalDays(date);
      } else {
        return noWeekend;
    }
  }
  $(function() { 
    $("#shipdate").datepicker({
      minDate: 0,
      dateFormat: 'DD, d MM, yy',
      beforeShowDay: noWeekendsOrHolidays,
      showOn: 'button',
      buttonImage: 'images/calendar.gif', 
      buttonImageOnly: true
     });
  });
});

Sql में एक डेटाबेस बनाएँ और आपको MM / DD / YYYY प्रारूप में छुट्टी की तारीखें डालें वरचेर के रूप में नीचे दी गई सामग्री को फ़ाइल getdate.php में डालें।


[php]
$sql="SELECT dates FROM holidaydates";
$result = mysql_query($sql);
$chkdate = $_POST['chkdate'];
$str='';
while($row = mysql_fetch_array($result))
{
$str .=$row[0].'';
}
echo $str;
[/php]

हैप्पी कोडिंग !!!! :-)


5

सप्ताहांत चयन को अक्षम करने के लिए आप noWeekends फ़ंक्शन का उपयोग कर सकते हैं

  $(function() {
     $( "#datepicker" ).datepicker({
     beforeShowDay: $.datepicker.noWeekends
     });
     });

4
$("#selector").datepicker({ beforeShowDay: highlightDays });

...

var dates = [new Date("1/1/2011"), new Date("1/2/2011")];

function highlightDays(date) {

    for (var i = 0; i < dates.length; i++) {
        if (date - dates[i] == 0) {
            return [true,'', 'TOOLTIP'];
        }
    }
    return [false];

}

2

इस संस्करण में, महीने, दिन, और वर्ष कैलेंडर पर ब्लॉक करने के लिए कौन से दिन निर्धारित करते हैं।

$(document).ready(function (){
  var d         = new Date();
  var natDays   = [[1,1,2009],[1,1,2010],[12,31,2010],[1,19,2009]];

  function nationalDays(date) {
    var m = date.getMonth();
    var d = date.getDate();
    var y = date.getFullYear();

    for (i = 0; i < natDays.length; i++) {
      if ((m == natDays[i][0] - 1) && (d == natDays[i][1]) && (y == natDays[i][2]))
      {
        return [false];
      }
    }
    return [true];
  }
  function noWeekendsOrHolidays(date) {
    var noWeekend = $.datepicker.noWeekends(date);
      if (noWeekend[0]) {
        return nationalDays(date);
      } else {
        return noWeekend;
    }
  }
  $(function() { 
    $(".datepicker").datepicker({

      minDate: new Date(d.getFullYear(), 1 - 1, 1),
      maxDate: new Date(d.getFullYear()+1, 11, 31),

      hideIfNoPrevNext: true,
      beforeShowDay: noWeekendsOrHolidays,
     });
  });
});

0

कुछ दिनों के लिए आप ऐसा कुछ कर सकते हैं। <input type="text" class="form-control datepicker" data-disabled-days="1,3">जहां 1 सोमवार है और 3 बुधवार है


0

नवीनतम बूटस्ट्रैप 3 संस्करण (bootstrap-datepicker.js) beforeShowDayमें इस प्रारूप में परिणाम की उम्मीद है:

{ enabled: false, classes: "class-name", tooltip: "Holiday!" }

वैकल्पिक रूप से, यदि आप सीएसएस और टूलटिप के बारे में परवाह नहीं करते हैं, तो falseतारीख को अचूक बनाने के लिए बस एक बूलियन वापस करें ।

इसके अलावा, वहाँ नहीं है $.datepicker.noWeekends, तो आप इस की तर्ज पर कुछ करने की जरूरत है:

var HOLIDAYS = {  // Ontario, Canada holidays
    2017: {
        1: { 1: "New Year's Day"},
        2: { 20: "Family Day" },
        4: { 17: "Easter Monday" },
        5: { 22: "Victoria Day" },
        7: { 1: "Canada Day" },
        8: { 7: "Civic Holiday" },
        9: { 4: "Labour Day" },
        10: { 9: "Thanksgiving" },
        12: { 25: "Christmas", 26: "Boxing Day"}
    }
};

function filterNonWorkingDays(date) {
    // Is it a weekend?
    if ([ 0, 6 ].indexOf(date.getDay()) >= 0)
        return { enabled: false, classes: "weekend" };
    // Is it a holiday?
    var h = HOLIDAYS;
    $.each(
        [ date.getYear() + 1900, date.getMonth() + 1, date.getDate() ], 
        function (i, x) {
            h = h[x];
            if (typeof h === "undefined")
                return false;
        }
    );
    if (h)
        return { enabled: false, classes: "holiday", tooltip: h };
    // It's a regular work day.
    return { enabled: true };
}

$("#datePicker").datepicker({ beforeShowDay: filterNonWorkingDays });

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.