শনিবার এবং রবিবার (এবং ছুটির দিনগুলি) অক্ষম করার জন্য 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, ''];
}

ফাংশনে অন্তর্নির্মিত একটি হ'ল নো উইকেন্ডস নামে পরিচিত যা সপ্তাহান্তের দিনগুলির নির্বাচনকে বাধা দেয়।

$(".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 UI 1.8.19 হিসাবে, পূর্ববর্তী শোডে বিকল্পটি একটি alচ্ছিক তৃতীয় প্যারামিটার গ্রহণ করে, একটি পপআপ টুলটিপ


2
এর জন্য ধন্যবাদ, ডক্সে এই পদ্ধতিটি কোথাও খুঁজে পেল না।
নিল আইটকে

2
চমৎকার সমাধান। বিশেষত আপনার ব্যাখ্যাটি কতটা সংক্ষিপ্ত তা পছন্দ করে। @ নীল: দেব.জকুইউই.ইউকিট / ৫৮৫১
কৌশিক গোপাল

Uncaught TypeError: Cannot read property 'noWeekends' of undefined
এটির

আপনি যদি ইতিমধ্যে এটি ইনস্ট্যান্ট করে থাকেন তবে আপনি বিকল্পটি আপডেট করতে পারেন: $ ('# নির্বাচক')। ডেটপিকার ('অপশন', 'শোরডে এর আগে', d .ডেটপিকার.নো উইকেন্ডস);
Marcaum54

42

আপনি যদি না চান তবে সাপ্তাহিক ছুটিগুলি একেবারে প্রদর্শিত হবে, কেবল:

সিএসএস

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

1
দিনগুলি পুরোপুরি আড়াল করতে তবে শিরোনাম এবং ফাঁকা স্থানগুলি দেখান:td.ui-datepicker-week-end { visibility: hidden; }
ভেল ভিক্টাস

সাপ্তাহিক ছুটি বাদ দেওয়ার জন্য এটি খুব ঝরঝরে উপায়।
itdarrylnorris

ধন্যবাদ, খুব সুন্দর :)
ফক্স

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

কোডের এই সংস্করণটি আপনাকে স্কিল ডাটাবেস থেকে ছুটির তারিখগুলি পেতে এবং ইউআই ডেটপিকারে নির্দিষ্ট তারিখটি অক্ষম করে দেবে


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

বর্গাকারে একটি ডেটাবেস তৈরি করুন এবং এমএম / ডিডি / ওয়াইওয়াইওয়াই ফর্ম্যাটে আপনার ছুটির তারিখগুলি বর্ণের হিসাবে রাখুন নীচের বিষয়বস্তুকে একটি ফাইল 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

উইকএন্ড নির্বাচনটি অক্ষম করতে আপনি উইকএন্ডস ফাংশনটি ব্যবহার করতে পারেন

  $(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 সংস্করণে (বুটস্ট্র্যাপ-ডেটপিকার.জেএস) 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 });

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.