Может UI jQuery Datepicker быть сделанным отключить субботы и воскресенья (и праздники)?

Возможны две проблемы:

  1. Как указано в документации для addBoundaryTimeObserver:

    Вы должны поддерживать строгую ссылку на возвращаемое значение как Пока вы хотите, чтобы наблюдатель вызывал наблюдатель времени

    Поскольку ваш исходный код не сохраняет ссылку на возвращенный внутренний непрозрачный наблюдатель времени, наблюдатель, вероятно, освобождается немедленно и, следовательно, никогда не будет называется.

  2. Убедитесь, что время, которое вы регистрируете для наблюдения, действительно имеет правильное значение:

    • playerItem.duration может быть неопределенным (см. Документацию этого свойства)
    • даже продолжительность элемента playerItem asset может быть неизвестна, или неточная оценка, в зависимости от типа актива и состояния загрузки (снова, см. документацию AVAsset.duration на это).

    Как следствие, время, которое вы регистрируете для наблюдения, может никогда не быть достигнуто (обратите внимание, что время можно легко проверить, вставив CMTimeShow(duration))

[1124 ] Подходы для решения этой проблемы:

  • , если вы просто хотите остановить игрока, когда достигнут конец playerItem, установки player.actionAtItemEnd в pause может быть достаточно

  • если вам нужно выполнить некоторую настраиваемую логику, когда достигается конец элемента, зарегистрируйте наблюдателя для уведомлений AVPlayerItemDidPlayToEndTime с playerItem в качестве объекта. Этот механизм не зависит от, возможно, точных длительностей и, следовательно, более надежен

192
задан Salman A 11 October 2013 в 00:28
поделиться

5 ответов

Существует beforeShowDay опция, которая берет функцию, которую назовут для каждой даты, возвращая true, если дата позволяется или ложь, если это не. Из документов:


beforeShowDay

Функция берет дату в качестве параметра и должна возвратить массив с [0] равный истинному/ложному указанию, можно ли эта дата выбрать и 1 равное имени (именам) класса CSS или '' для презентации по умолчанию. Это называют в течение каждого дня в datepicker, прежде чем будет отображенный.

Отобразите некоторые национальные праздники в datepicker.

$(".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 UI 1.8.19, beforeShowDay опция также принимает дополнительный третий параметр, раскрывающуюся подсказку

242
ответ дан j08691 23 November 2019 в 05:31
поделиться

Если Вы не хотите, чтобы выходные появились вообще, просто:

CSS

th.ui-datepicker-week-end,
td.ui-datepicker-week-end {
    display: none;
}
41
ответ дан 23 November 2019 в 05:31
поделиться

В этой версии месяц, день, и год определяют, какие дни блокировать в календаре.

$(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,
     });
  });
});
2
ответ дан 23 November 2019 в 05:31
поделиться

Эта версия кода заставит вас получить даты праздников из базы данных 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 и установите праздник даты в формате ММ / ДД / ГГГГ как Varchar Поместите приведенное ниже содержимое в файл 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]

Happy Coding !!!! : -)

6
ответ дан 23 November 2019 в 05:31
поделиться

Эти ответы были очень полезны. Спасибо.

Мой вклад ниже добавляет массив, в котором несколько дней могут возвращать false (мы закрыты каждый вторник, среду и четверг). И я связал конкретные даты плюс годы и функции без выходных.

Если вы хотите, чтобы выходные были нерабочими, добавьте [суббота], [воскресенье] в массив closedDays.

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




});
26
ответ дан 23 November 2019 в 05:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: