За последние 24 часа нас посетили 15514 программистов и 1610 роботов. Сейчас ищут 870 программистов ...

Скрипт выбора диапазона дат с ограничениям

Тема в разделе "JavaScript и AJAX", создана пользователем sound, 29 мар 2014.

  1. sound

    sound Guest

    Сам скрипт нашел тут
    http://api.jqueryui.com/datepicker/

    Код (Text):
    1. <!doctype html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="utf-8">
    5. <title>jQuery UI Datepicker - Select a Date Range</title>
    6. <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
    7. <script src="//code.jquery.com/jquery-1.9.1.js"></script>
    8. <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
    9. <link rel="stylesheet" href="/resources/demos/style.css">
    10. <script>
    11. $(function() {
    12. $( "#from" ).datepicker({
    13. changeMonth: true,
    14. numberOfMonths: 1,
    15. onClose: function( selectedDate ) {
    16. $( "#to" ).datepicker( "option", "minDate", "-2m" );
    17. }
    18. });
    19. $( "#to" ).datepicker({
    20. changeMonth: true,
    21. numberOfMonths: 1,
    22. onClose: function( selectedDate ) {
    23. $( "#from" ).datepicker( "option", "maxDate", "+2m" );
    24. }
    25. });
    26. });
    27. </script>
    28. </head>
    29. <body>
    30. <label for="from">From</label>
    31. <input type="text" id="from" name="from">
    32. <label for="to">to</label>
    33. <input type="text" id="to" name="to">
    34. </body>
    35. </html>
    нужно чтобы можно было установить два ограничения
    1) Самая ранняя дата меньше которой нельзя выбрать, к примеру если доходит выбор до 1 сентября 2010, то 31 августа 2010 уже не доступно
    2) Ограничение по размеру диапазона дат, то есть установил я 60 дней и значит нельзя выбрать диапазон больше

    Пытался всяко разно настроить не получилось, нужно как то поиграться с minDate и maxDate и еще чем то.
    Помогите плз настроить.
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Найди одно отличие:
    Код (Text):
    1. $( "#from" ).datepicker({
    2.   changeMonth: true,
    3.   numberOfMonths: 1,
    4.   onClose: function( selectedDate ) {
    5.     $( "#from" ).datepicker( "option", "minDate", "-2m" );
    6.   }
    7. });
     
  3. sound

    sound Guest

    вообще ничего не изменилось

    сделал так
    Код (Text):
    1.  
    2. <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
    3. <script src="//code.jquery.com/jquery-1.9.1.js"></script>
    4. <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
    5. <link rel="stylesheet" href="/resources/demos/style.css">
    6. <script>
    7. $(function() {
    8. $( "#from" ).datepicker({
    9. changeMonth: true,
    10. numberOfMonths: 1,
    11. onClose: function( selectedDate ) {
    12. $( "#from" ).datepicker( "option", "minDate", "-2m" );
    13. }
    14. });
    15. $( "#to" ).datepicker({
    16. changeMonth: true,
    17. numberOfMonths: 1,
    18. onClose: function( selectedDate ) {
    19. $( "#to" ).datepicker( "option", "maxDate", "+2m" );
    20. }
    21. });
    22. });
    23. </script>
    24. <label for="from">от</label>
    25. <input type="text" id="from" name="from">
    26. <label for="to">до</label>
    27. <input type="text" id="to" name="to">
     
  4. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Ну как же, начинают работать ограничения -2 месяца в левом поле и +2 месяца в правом.
     
  5. sound

    sound Guest

    YSandro
    Сорри не прав, ограничение работает, просто когда в поле даты ничего нет, то листать дату можно хоть на 1000 лет назад, но при выборе встает все равно не позже чем 2 месяца.

    А как задать диапазон в 60 дней между начальной и конечно датой ?
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    1. Выбрать первую дату, как обычно.
    2. Взять дату из первого поля с помощью getDate(), прибавить 60 дней.
    3. Установить макс. дату для второго поля.


    Ну вот, я поигрался, пример:
    Код (Text):
    1. $(function(){
    2.     $("#from").datepicker({
    3.         changeMonth: true,
    4.         numberOfMonths: 1,
    5.         minDate: -20,// 20 дней назад - минимальная дата
    6.         onSelect: function(selectedDate) {
    7.             var minDate = $.datepicker.parseDate("mm/dd/yy", selectedDate);
    8.             $("#to").datepicker("option", "minDate", minDate);// мин. для 2 поля
    9.             var maxDate = new Date(minDate.getTime());// копируем дату
    10.             maxDate.setDate(maxDate.getDate()+30);// от выбранной +30 дней
    11.             $("#to").datepicker("option", "maxDate", maxDate);// макс. для 2 поля
    12.         }
    13.     });
    14.     $("#to").datepicker({
    15.         changeMonth: true,
    16.         numberOfMonths: 1
    17.     });
    18. });
    Тут при инициализации сразу ставим минимальную дату (например, 20 дней назад).
    После выбора устанавливаем минимум и максимум для второго поля.

    Второе поле, видимо, вообще надо заблокировать, пока не выбрана первая дата.
     
  7. sound

    sound Guest

    YSandro
    Все работает спасибо!

    1) А как заблокировать второе поле до того как первое получит значение ?
    2) Как сделать чтобы второе поле было еще ограниченно по максимальной дате по сегодняшнему дню (сейчас максимальный диапазон для выбора 30 дней, но можно выбрать и будущие даты если они попадают в диапазон 30 дней)
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А дальше сам.