Установите дату ввода максимального времени на сегодняшний день

У меня просто простая строка кода:

<input type='date' min='1899-01-01' max='2000-01-01'></input>

Есть ли простой способ установить максимальную дату на "сегодня" вместо 2000-01-01? Или мне нужно использовать Javascript для этого?

Ответ 1

Для этого вам понадобится Javascript:

HTML

<input id="datefield" type='date' min='1899-01-01' max='2000-13-13'></input>

JS

var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();
 if(dd<10){
        dd='0'+dd
    } 
    if(mm<10){
        mm='0'+mm
    } 

today = yyyy+'-'+mm+'-'+dd;
document.getElementById("datefield").setAttribute("max", today);

JSFiddle demo

Ответ 2

Вместо Javascript более коротким решением на базе PHP может быть:

 <input type="date" name="date1" max=
     <?php
         echo date('Y-m-d');
     ?>
 >

Ответ 3

JavaScript только простое решение

datePickerId.max = new Date().toISOString().split("T")[0];
<input type="date" id="datePickerId" />

Ответ 4

Javascript потребуется; например:

$(function(){
    $('[type="date"]').prop('max', function(){
        return new Date().toJSON().split('T')[0];
    });
});

JSFiddle demo

Ответ 5

Да, и нет. В HTML 5 есть атрибуты min и max, но

Атрибут max не будет работать для дат и времени в Internet Explorer 10+ или Firefox, поскольку IE 10+ и Firefox не поддерживают эти типы ввода.

Итак, если вас смущает документация по этим атрибутам, но это не работает, почему. См. Страница W3 для версий.

Я считаю, что проще всего использовать Javascript, - говорят другие ответы, поскольку вы можете просто использовать предварительно подготовленный модуль. Кроме того, у многих библиотек выбора даты Javascript есть настройки min/max и есть тот красивый календарь.

Ответ 6

toISOString() выдаст текущую дату UTC. Таким образом, чтобы получить текущее местное время, мы должны получить getTimezoneOffset() и вычесть его из текущего времени.

document.getElementById('dt').max = new Date(new Date().getTime() - new Date().getTimezoneOffset() * 60000).toISOString().split("T")[0];
<input type="date" min='1899-01-01' id="dt" />

Ответ 7

это может быть полезно: если вы хотите сделать это с помощью форм Symfony:

 $today = new DateTime('now');
 $formBuilder->add('startDate', DateType::class, array(
                   'widget' => 'single_text',
                   'data'   => new \DateTime(),
                   'attr'   => ['min' => $today->format('Y-m-d')]
                   ));

Ответ 8

Короткая, но, возможно, менее читаемая версия одного из предыдущих ответов.

   <script type="text/javascript">
    $(document).ready(DOM_Load);

    function DOM_Load (e) {
        $("#datefield").on("click", dateOfBirth_Click);
    }

    function dateOfBirth_Click(e) {
        let today = new Date();
        $("#datefield").prop("max", '${today.getUTCFullYear()}-${(today.getUTCMonth() + 1).toString().padStart(2, "0")}-${today.getUTCDate().toString().padStart(2, "0")}');
    }

</script>

Ответ 9

У меня также была такая же проблема. Я создаю ее через этот путь. Я использовал фреймворки struts 2.

  <script type="text/javascript">

  $(document).ready(function () {
  var year = (new Date).getFullYear();
  $( "#effectiveDateId" ).datepicker({dateFormat: "mm/dd/yy", maxDate: 
  0});

  });


  </script>

        <s:textfield name="effectiveDate" cssClass="input-large" 
   key="label.warrantRateMappingToPropertyTypeForm.effectiveDate" 
   id="effectiveDateId" required="true"/>

Это сработало для меня.