Выделите даты в определенном диапазоне с помощью выбора даты в jQuery - PullRequest
18 голосов
/ 05 марта 2010

Мне нужно выделить даты между начальной и конечной датами, которые я смогу указать. Может кто-нибудь мне помочь?

Ответы [ 7 ]

32 голосов
/ 05 марта 2010

Вы можете использовать событие beforeShowDay . Он будет вызываться для каждой даты, которая должна быть показана в календаре. Он передает дату и возвращает массив с [0] = isSelectable, 1 = cssClass, [2] = некоторый текст подсказки

$('#whatever').datepicker({
            beforeShowDay: function(date) {
             if (date == myDate) {
              return [true, 'css-class-to-highlight', 'tooltipText'];

              }
           }
});
22 голосов
/ 25 января 2012

Вот рабочий пример! Здесь вам нужно будет сделать пакет с http://jqueryui.com/download с ядром, виджетом и датчиком.

Часть javascript, которую нужно поставить перед:

<script>
$(document).ready(function() {

    var dates = ['22/01/2012', '23/01/2012']; //
            //tips are optional but good to have
    var tips  = ['some description','some other description'];      

    $('#datepicker').datepicker({                
        dateFormat: 'dd/mm/yy',
        beforeShowDay: highlightDays,
        showOtherMonths: true,
        numberOfMonths: 3,
    });

    function highlightDays(date) {
        for (var i = 0; i < dates.length; i++) {
            if (new Date(dates[i]).toString() == date.toString()) {              
                return [true, 'highlight', tips[i]];
            }
        }
        return [true, ''];
     } 

});
</script>

Часть HTML:

<div id="datepicker"></div>

Добавьте где-нибудь этот CSS:

    td.highlight {border: none !important;padding: 1px 0 1px 1px !important;background: none !important;overflow:hidden;}
td.highlight a {background: #99dd73 url(bg.png) 50% 50% repeat-x !important;  border: 1px #88a276 solid !important;}

И вам нужно будет сделать небольшое изображение с именем bg.png, чтобы оно работало

13 голосов
/ 12 июня 2012

Думал, я бы бросил свои два цента, так как это кажется быстрее и легче, чем другие:

jQuery(function($) {
  var dates = {
    '2012/6/4': 'some description',
    '2012/6/6': 'some other description'
  };

  $('#datepicker').datepicker({
    beforeShowDay: function(date) {
      var search = date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate();

      if (search in dates) {
        return [true, 'highlight', (dates[search] || '')];
      }

      return [false, '', ''];
    }
  });
});
3 голосов
/ 14 апреля 2016

Не уверен, будет ли это все еще полезно, но так как это было полезно для меня, я хочу поделиться тем, что я сделал:

В моем JavaScript:

var holidays= ["2016/09/18", "2016/09/19", "2016/01/01", "2016/05/01", "2016/06/27", "2016/08/15"];

$("#SomeID").datepicker({ beforeShowDay: highLight });

function highLight(date) {
        for (var i = 0; i < holidays.length; i++) {
            if (new Date(holidays[i]).toString() == date.toString()) {
                return [true, 'ui-state-holiday'];
            }
        }
        return [true];
    }

И вjquery-ui-theme.css Я добавил

.ui-state-holiday .ui-state-default {
    color: red;
}

Если вы хотите также выделить выходные, вы должны использовать этот CSS вместо

.ui-state-holiday .ui-state-default, .ui-datepicker-week-end .ui-state-default {
    color: red;
}

И вот результат:
jqueryUI Calendar with Weekends and Holidays Highlight

(обратите внимание, что я настроил свой язык на испанский, но это не важно для этого кода)

0 голосов
/ 08 ноября 2017

Поздно к вечеринке, но вот JSFiddle, который я использовал для проверки:

https://jsfiddle.net/gq6kdoc9/

HTML:

  <div id="datepicker"></div>

JavaScript:

var dates = ['11/13/2017', '11/14/2017'];
   //tips are optional but good to have
   var tips = ['some description', 'some other description'];

   $('#datepicker').datepicker({
     dateFormat: 'dd/mm/yy',
     beforeShowDay: highlightDays,
     showOtherMonths: true,
     numberOfMonths: 3,
   });

   function highlightDays(date) {
     for (var i = 0; i < dates.length; i++) {
       if (new Date(dates[i]).toString() == date.toString()) {
         return [true, 'highlight', tips[i]];
       }
     }
     return [true, ''];
   }

И CSS:

td.highlight {
  border: none !important;
  padding: 1px 0 1px 1px !important;
  background: none !important;
  overflow: hidden;
}

td.highlight a {
  background: #ad3f29 url(bg.png) 50% 50% repeat-x !important;
  border: 1px #88a276 solid !important;
}

Построен на рабочем примере Майка, приведенном выше!

0 голосов
/ 22 декабря 2013

mugur, ваш код не работал для меня в Firefox или Safari, для этого требовалось отформатировать date var (который я получил из здесь ). Здесь

function highlightDays(date) {
for (var i = 0; i < dates.length; i++) {

var d = date.getDate();
var m =  date.getMonth();
m += 1;  // JavaScript months are 0-11
var y = date.getFullYear();

var dateToCheck = (d + "/" + m + "/" + y);
    if (dates[i] == dateToCheck) {
        return [true, 'highlight', tips[i]];
    }
    }
return [true, ''];
}

И, разумеется, в силу вышеприведенной функции она не учитывает заполнение начальными нулями, поэтому необходимо изменить массив dates на:

var dates = ['22/1/2014', '23/1/2014'];
0 голосов
/ 18 августа 2011

Если вы используете Datepick Кейта Вуда, вы можете использовать следующий пример из здесь

$(selector).datepick({onDate: highlightDays}); 

function highlightDays(date) { 
    return {selectable: true, dateClass: 'highlight-custom', title: 'tooltip'}; 
}
...