Почему настройки «Мин. И Макс.» Не работают в окне выбора даты? - PullRequest
0 голосов
/ 23 сентября 2019

Ранее я задавал вопрос, чтобы установить даты одного выбора даты относительно изменения месяца / года другого выбора даты.Я не получил точного ответа, но каким-то образом мне удалось получить минимальную и максимальную даты для выбора даты, ссылаясь на различные ответы о переполнении стека.Но эти минимальные и максимальные настройки даты не работают должным образом.

Выбор даты и месяца: год:

 <label> Month</label>
 <div class="input-group date">
    <input type="text" class="form-control pull-right" id="txtMonth" onchange="MonthDatePick();">
    <div class="input-group-addon">
        <i class="fa fa-calendar"></i>
    </div>
</div>

Мой выбранный пункт выбора даты: месяц:

<div class="col-lg-3">
    <label> From</label>
    <div class="input-group date">
        <input type="text" class="form-control pull-right" id="txtFrom">
        <div class="input-group-addon">
            <i class="fa fa-calendar"></i>
        </div>
    </div>
</div>

Скрипт:

function MonthDatePick() {
  var month = $('#txtMonth').datepicker('getDate').getMonth() + 1;//('getMonth');            
var year = $('#txtMonth').datepicker('getDate').getFullYear();//('getFullYear');   
var minDate = new Date(year, month-1, 1);
 var maxDate = new Date(year,month, 0);
$("#txtFrom").datepicker({
    autoclose: true,
    minDate: minDate,
    maxDate: maxDate,
    format: 'dd/mm/yyyy',
    //defaultDate:minDate,
    changeMonth: false,
    changeYear: false,
});
}

Я отладил и обнаружил, что при выборе месяца были определены минимальные и максимальные даты.Например: если я выберу, Feb 2018 означает,

min date comes as :01/02/2018

max date comes as : 28/02/2018,

, но это изменение не повторяется в моем окне выбора даты

Отладка изображения

Отладка изображения, показывающего минимальную дату

Вот Моя скрипка

Как это исправить?

Ответы [ 3 ]

1 голос
/ 23 сентября 2019

В настоящее время вы пытаетесь воссоздать существующий указатель даты.Вместо этого измените текущий экземпляр, используя методы setStartDate и setEndDate.

$("#txtClaimFrom").datepicker("setStartDate", minDate);
$("#txtClaimFrom").datepicker("setEndDate", maxDate);

$(document).ready(function() {
  $('#txtClaimMonth').datepicker({
    autoclose: true,
    format: "MM yyyy",
    viewMode: "months",
    minViewMode: "months",
  });
  $('#txtClaimFrom').datepicker({
    autoclose: true,
    format: 'dd/mm/yyyy'
  })
});

function MonthDatePick() {
  var month = $('#txtClaimMonth').datepicker('getDate').getMonth() + 1; //('getMonth');            
  var year = $('#txtClaimMonth').datepicker('getDate').getFullYear(); //('getFullYear');   
  var minDate = new Date(year, month - 1, 1);
  var maxDate = new Date(year, month, 0);
  $("#txtClaimFrom").datepicker("setStartDate", minDate);
  $("#txtClaimFrom").datepicker("setEndDate", maxDate);
}
.col-lg-3 { margin-bottom: 180px; }
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/css/bootstrap-datepicker.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/js/bootstrap-datepicker.min.js"></script>
<div class="col-lg-3">
  <label>Claim Month</label>
  <div class="input-group date">
    <input type="text" class="form-control pull-right" id="txtClaimMonth" onchange="MonthDatePick();">
    <div class="input-group-addon bg-purple">
      <i class="fa fa-calendar"></i>
    </div>
  </div>
</div>
<div class="col-lg-3">
  <label>Claim From</label>
  <div class="input-group date">
    <input type="text" class="form-control pull-right" id="txtClaimFrom">
    <div class="input-group-addon bg-purple">
      <i class="fa fa-calendar"></i>
    </div>
  </div>
</div>

В качестве альтернативы, вы можете remove текущий указатель даты и повторно инициализировать его с нуля.Обратите внимание, что Bootstrap Datepicker использует startDate и endDate в качестве параметров, а не minDate и maxDate.

$("#txtClaimFrom").datepicker("remove");
$("#txtClaimFrom").datepicker({
  autoclose: true,
  startDate: minDate,
  endDate: maxDate,
  format: 'dd/mm/yyyy',
  changeMonth: false,
  changeYear: false,
});

$(document).ready(function() {
  $('#txtClaimMonth').datepicker({
    autoclose: true,
    format: "MM yyyy",
    viewMode: "months",
    minViewMode: "months",
  });
  $('#txtClaimFrom').datepicker({
    autoclose: true,
    format: 'dd/mm/yyyy'
  })
});

function MonthDatePick() {
  var month = $('#txtClaimMonth').datepicker('getDate').getMonth() + 1; //('getMonth');            
  var year = $('#txtClaimMonth').datepicker('getDate').getFullYear(); //('getFullYear');   
  var minDate = new Date(year, month - 1, 1);
  var maxDate = new Date(year, month, 0);
  $("#txtClaimFrom").datepicker("remove");
  $("#txtClaimFrom").datepicker({
    autoclose: true,
    startDate: minDate,
    endDate: maxDate,
    format: 'dd/mm/yyyy',
    changeMonth: false,
    changeYear: false,
  });
}
.col-lg-3 {
  margin-bottom: 180px;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/css/bootstrap-datepicker.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.0/js/bootstrap-datepicker.min.js"></script>
<div class="col-lg-3">
  <label>Claim Month</label>
  <div class="input-group date">
    <input type="text" class="form-control pull-right" id="txtClaimMonth" onchange="MonthDatePick();">
    <div class="input-group-addon bg-purple">
      <i class="fa fa-calendar"></i>
    </div>
  </div>
</div>
<div class="col-lg-3">
  <label>Claim From</label>
  <div class="input-group date">
    <input type="text" class="form-control pull-right" id="txtClaimFrom">
    <div class="input-group-addon bg-purple">
      <i class="fa fa-calendar"></i>
    </div>
  </div>
</div>
1 голос
/ 23 сентября 2019

Вы не используете правильные опции:

  function MonthDatePick() {
      var month = $('#txtMonth').datepicker('getDate').getMonth() + 1;//('getMonth');            
      var year = $('#txtMonth').datepicker('getDate').getFullYear();//('getFullYear');   
      var minDate = new Date(year, month-1, 1);
      var maxDate = new Date(year,month, 0);
      $("#txtFrom").datepicker({
        autoclose: true,
        startDate: minDate,
        endDate: maxDate,
        format: 'dd/mm/yyyy',
        //defaultDate:minDate,
        changeMonth: false,
        changeYear: false,
      });
    }

Замените minDate с startDate и maxDate с endDate

См. bootstrap-datepicker документации

0 голосов
/ 23 сентября 2019

Попробуйте этот код

HTML-код:

<label> Month</label>
<div class="input-group date">
<input type="text" class="form-control pull-right" id="txtMonth" onchange="MonthDatePick();">
<div class="input-group-addon">
    <i class="fa fa-calendar"></i>
</div>
</div>

<div class="col-lg-3">
<label> From</label>
<div class="input-group date">
    <input type="text" class="form-control pull-right" id="txtFrom">
    <div class="input-group-addon">
        <i class="fa fa-calendar"></i>
    </div>
</div>
</div>

JS-код:

<script type="text/javascript">
   $("#txtMonth").datepicker({
   autoclose: true,
   startView: "months", 
   minViewMode: "months",
   format: 'M-yyyy',
   //defaultDate:minDate,
   changeMonth: false,
   changeYear: false,
});

function MonthDatePick() {
   var month = $('#txtMonth').datepicker('getDate').getMonth() + 1;//('getMonth');            
   var year = 
   $('#txtMonth').datepicker('getDate').getFullYear();//('getFullYear');   
   var minDate = new Date(year, month-1, 1);
   minDate = minDate.toLocaleDateString('en-GB');
   var maxDate = new Date(year,month, 0);
   maxDate = maxDate.toLocaleDateString('en-GB');
   $("#txtFrom").datepicker('destroy').datepicker({
      autoclose: true,
      startDate: minDate,
      endDate: maxDate,
      format: 'dd/mm/yyyy',
      //defaultDate:minDate,
      changeMonth: false,
      changeYear: false,
   });
  $('#txtFrom').datepicker('setDate',minDate);
}
</script>

Вывод кода:

enter image description here

...