Как я могу использовать тип ввода даты для динамического разрешения только одного года с текущей даты? - PullRequest
0 голосов
/ 01 октября 2019

Вот мой код. Я не уверен, как добиться максимальной даты, кроме установки этого в самом теге ввода. Я хочу, чтобы он был динамичным, поэтому, какой бы ни была текущая дата, календарь допускает выбор только до одного года.

<input type="date" id="txtDate" />
$(function(){
    var dtToday = new Date();

    var month = dtToday.getMonth() + 1;
    var day = dtToday.getDate();
    var year = dtToday.getFullYear();
    if(month < 10)
        month = '0' + month.toString();
    if(day < 10)
        day = '0' + day.toString();

    var maxDate = dtToday + 365;
    alert(maxDate);
    $('#txtDate').attr('max', maxDate);
});

пример: сегодня 10/1/2019 следует разрешать выбирать только от 10/1 / 2019-10 / 1/2020, завтра пользователю разрешается выбирать толькос 10/2/2019-10 / 2/2020 ссылка на скрипку

Ответы [ 4 ]

0 голосов
/ 02 октября 2019

Установка минимального и максимального значений для ввода даты на основе сегодняшней даты может быть выполнена при загрузке страницы:

// Formt date as YYYY-MM-DD
function formatISOLocal(d) {
  let z = n => ('0' + n).slice(-2);
  return d.getFullYear()+'-'+z(d.getMonth()+1) + '-' + z(d.getDate());
}

window.onload = function() {
  let inp = document.querySelector('#i0');
  let d = new Date();
  inp.min = formatISOLocal(d);
  inp.defaultValue = inp.min;
  d.setFullYear(d.getFullYear() + 1);
  inp.max = formatISOLocal(d);
  // Debug
  console.log(inp.outerHTML);
}
<input type="date" id="i0">

Если пользовательский агент не поддерживает тип ввода даты, все равно будут установлены значения min / max / default, но вам придется обрабатыватьзначений диапазона самостоятельно.

0 голосов
/ 01 октября 2019

Просто добавьте год к текущей дате

var dtToday = new Date();
dtToday.setYear(dtToday.getYear() + 1);
0 голосов
/ 01 октября 2019
$(function(){
  var dtToday = new Date();
  dtToday.setFullYear(dtToday.getFullYear() + 1)
  let formatted_date = dtToday.getFullYear() + "-" + (dtToday.getMonth() + 1) + "-" + dtToday.getDate()
  alert(formatted_date);
  $('#txtDate').attr('max', formatted_date);
});
0 голосов
/ 01 октября 2019

Вы не можете добавить объект даты таким образом;Вы должны сначала получить это как метку времени. Вы можете сделать это, используя Date.now() или, если вам нужен объект Date, dtToday.getTime().

. Это дает вам временную метку в миллисекундах, поэтому вам также необходимо преобразовать 365 дней в миллисекунды;Это означает, что вы хотите добавить 365 * 24 * 60 * 60 * 1000 к нему, а не просто 365.

...