html - Logica de validare a datelor în cadrul <pcalender> din PrimeNg
Încerc să setez o dată minimă și maximă în cadrul PrimeNG. Aș dori ca câmpul "DATA DE LA" să nu fie mai vechi de 2 săptămâni de la data de azi. Și câmpul "DATA PÂNĂ LA" să nu fie la mai mult de 1 an de la data de azi.
Iată câmpurile mele de date.
<p-calendar [showIcon]="true" [minDate]="minDate" [readonlyInput]="true" placeholder="From Date" id="setter" ></p-calendar>
<p-calendar [showIcon]="true" [maxDate]="maxDate" [readonlyInput]="true"placeholder="To Date" id="setter"></p-calendar>
Acesta este în logica mea din fișierul .ts
ngOnInit() {
let today = new Date();
let month = today.getMonth();
let year = today.getFullYear();
let prevMonth = (month === 0) ? 11 : month -1;
let nextMonth = (month === 11) ? 0 : month + 4;
this.minDate = new Date();
this.maxDate = new Date();
this.minDate.setMonth(prevMonth);
this.maxDate.setMonth(nextMonth);
}
Vizualizare a calendarului primeNG
Răspuns #1
Din cerințele pe care le-ați menționat, veți avea nevoie de un atribut [maxDate] pe fiecare control de dată/oră. Aveți o variabilă care setează maximul pentru Data De La la nimic mai mare de două săptămâni de acum:
this.fromDateMax = new Date(Date.now() + 12096e5);
Și o altă variabilă pentru a seta data maximă a câmpului 'Până la' la un an de acum:
this.toDateMax = new Date(new Date().setFullYear(new Date().getFullYear() + 1));
Ambele acestea din ngOnInit() vor seta limitele corespunzătoare așa cum ați menționat.
Iată stackblitz pentru referință și cele două răspunsuri de pe SO pe care le-am folosit pentru a obține limitele de date:
- Javascript Data Plus 2 Săptămâni (14 zile)
- Adaugă un an la data de astăzi
Răspunsul #2
A trebuit doar să fac o mică schimbare la nhOnit(). Arată așa acum și funcționează exact așa cum aveam nevoie.
ngOnInit() {
let today = new Date();
let month = today.getMonth();
let year = today.getFullYear();
let nextMonth = (month === 11) ? 0 : month + 4;
this.minDate = new Date(Date.now() - 12096e5);
this.maxDate = new Date(new Date().setFullYear(new Date().getFullYear() + 1));
this.maxDate.setMonth(nextMonth);
}
