Установить minDate / maxDate динамически на html datepicker

Мне нужно ограничить выбор даты, чтобы люди младше 16 лет не могли выбрать дату своего рождения в календаре до того дня, когда им исполнится 16 лет.

Я использовал Angular datepicker, и у меня не было проблем с этим кодом в моем файле машинописного текста:

now = new Date();
year = this.now.getFullYear();
month = this.now.getMonth();
day = this.now.getDay();
minDate = { year: this.year - 100, month: this.month, day: this.day };
maxDate = { year: this.year - 16, month: this.month + 1, day: this.day };

Вот мой HTML:

<input class = "form-control" [required] = "mngVis.birthdate.isrequired" 
type = "date" maxDate = "maxDate" minDate = "minDate" 
jhiTranslate = "form.birthdate.placeholder"
ngModel name = "birthdate" #birthdate = "ngModel">

У меня проблема с html datepicker по умолчанию, и мне нужно использовать этот datepicker, а не ngb-datepicker. Все найденные мной решения используют jQuery, но я не могу использовать его с Angular 6.

Надеюсь, я ясно дал понять, что вы можете мне с этим помочь!

Спасибо.

ETA:

Вот решение моей проблемы: app.component.ts:

import { Component } from '@angular/core';
import moment from 'moment'

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  name = 'Angular';

  now = new Date();
  year = this.now.getFullYear();
  month = this.now.getMonth();
  day = this.now.getDay();
  minDate = moment({year: this.year - 100, month: this.month, day: this.day}).format('YYYY-MM-DD');

  maxDate = moment({year: this.year - 16, month: this.month, day: this.day}).format('YYYY-MM-DD');

  date(ev) {
    console.info(this.minDate)
    console.info(ev.target.value)
  }
}

HTML:

 <input class = "form-control" [required] = "mngVis.birthdate.isrequired" 
    type = "date" [max] = "maxDate" [min] = "minDate" 
    jhiTranslate = "form.birthdate.placeholder"
    ngModel name = "birthdate" #birthdate = "ngModel">
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
5
0
36 243
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Проблема с HTML datepicker такая же, как и с тегами <b>, <i>, <u> ...: вы ожидаете, что эти теги будут вести себя каким-то образом, но это до браузера, чтобы относиться к ним так, как ему нравится.

Это означает, что <b>bold</b> может быть выделен жирным шрифтом в Chrome, но не в IE.

То же самое происходит с вводом даты: иногда у вашего пользователя не будет календаря для выбора (но все же ввода).

Преимущество datepickers заключается в том, что они отображают этот календарь с помощью простого старого HTML / CSS / JS, оставляя вам то, что будет работать в большинстве браузеров.

Если вы не хотите его использовать, устраивайте себя: но как вы реализуете валидацию?

Вместо блокировки дат в сборщике рассмотрите возможность использования проверки Angular для элемента управления:

<input class = "form-control" type = "date" max = "maxDate" min = "minDate" name = "birthdate" 
  [required] = "mngVis.birthdate.isrequired"
  jhiTranslate = "form.birthdate.placeholder" 
  [formControl] = "birthdate">
birthdate = new FormControl('', [Validators.max(this.birthdate), Validators.min(minDate)])

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

chloe 28.08.2018 10:22

@tiphanie делайте то, что должны, но не забудьте в любом случае использовать проверку Angular, чтобы убедиться, что ваши данные действительны!

user4676340 28.08.2018 10:24
Ответ принят как подходящий

Использование момента здесь для формирования даты

ДЕМО

Ссылка ----> https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date

//Taken current date as min date. and random as max date. 
// Default format of date is as "YYYY-MM-DD" so we need to convert using  moment  

minDate = moment(new Date()).format('YYYY-MM-DD')
maxDate  = "2018-09-08"

HTML:

<input class = "form-control" type = "date" [min] = "minDate" [max] = "maxDate">

Это не работает в браузере Safari. Что можно попробовать?

Utkarsh Awasthi 12.06.2020 13:15

Привет, @tiphanie. Если вы хотите использовать jQuery datepicker вместо ngb-datepicker.

Вы можете установить MaxDate и MinDate, используя опцию jQuery datepicker Api reference Method 'option'

.datepicker( 'option', 'minDate', new Date(2018, 1 - 1, 4))
.datepicker('option','maxDate', new Date(2018, 1 - 1, 24))

Проверьте мою рабочую ссылку: Пользовательский интерфейс Datepicker jQuery в Angular 6

@tiphanie для дальнейшей ссылки Api для выбора даты проверьте ссылку api.jqueryui.com/datepicker

Dhivakaran Ravi 27.08.2018 11:07

Для этого вам нужно добавить атрибуты max и min.

Демо на Stackblitz

component.ts

maxDate = "2018-08-28";
minDate:'2016-08-28';

component.html

<input type = "date"  [min] = "minDate | date:'yyyy-MM-dd'" [max] = "maxDate | date:'yyyy-MM-dd'" >

У меня аналогичная ситуация, когда у меня есть даты fromDt и toDt, и я хочу динамически настраивать их min и max. например max fromDt должен быть min toDt или min toDt должен быть max fromDt

Однако это не работает с использованием Angular JS ng-min и ng-max. Он просто показывает весь диапазон дат. Жесткое кодирование max и min работает должным образом, но я хочу использовать ng-min / min / ng-max / max для динамической настройки. Любые отзывы экспертов были бы очень полезны

<input type = "month" ng-model = "fromDt"  id = "fromDt" ng-min = "2015-01" ng-max = "{{toDt}}" ng-change = "fetch(fromDt, toDt)">              
 
 <input type = "month" ng-model = "toDt"  id = "toDt" ng-min = "{{fromDt}}" ng-change = "fetch(fromDt, toDt)" >  
maxDate = new Date(new Date().getTime() + 86400000).toISOString().substring(0, 10);

// конвертируем в подстроку, потому что формат datepicker

            <input type = "date" id = "dateSlot" class = "form-control app-inputfield" [min] = "maxDate" placeholder = "mm/d/year" [(ngModel)] = "serviceDate" [ngModelOptions] = "{standalone: true}">

Другие вопросы по теме