import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms'; // @dynamic export class FulldatefrValidator { static format(control: AbstractControl): ValidationErrors | null { if (!control.value) { return { required: true }; } if (!/^[0-9]{4}-[0-9]{2}-[0-9]{2}/.test(control.value)) { return { format: { message: (error, field) => `La date n'est pas dans un format valide jj/mm/yyyy` } }; } return null; } static interval(minDate: string, maxDate: string): ValidatorFn { return (control: AbstractControl): ValidationErrors | null => { if (minDate && maxDate && control.value) { const minDateEn = minDate.split('/'); const maxDateEn = maxDate.split('/'); const D1 = new Date(minDateEn[2] + '-' + minDateEn[1] + '-' + minDateEn[0]); const D2 = new Date(maxDateEn[2] + '-' + maxDateEn[1] + '-' + maxDateEn[0]); const D3 = new Date(control.value); if (D3.getTime() <= D2.getTime() && D3.getTime() >= D1.getTime()) { return null; } else { return { interval: { message: (error, field) => { return `La date doit être comprise entre le \"${minDate}\" et le \"${maxDate}\"`; } } }; } } return null; }; } static dateMin(minDate: string): ValidatorFn { return (control: AbstractControl): ValidationErrors | null => { if (minDate && control.value) { const minDateEn = minDate.split('/'); const D1 = new Date(minDateEn[2] + '-' + minDateEn[1] + '-' + minDateEn[0]); const D3 = new Date(control.value); if (D3.getTime() >= D1.getTime()) { return null; } else { return { dateMin: { message: (error, field) => { return `La date doit être après le \"${minDate}\"`; } } }; } } return null; }; } static dateMax(maxDate: string): ValidatorFn { return (control: AbstractControl): ValidationErrors | null => { if (maxDate && control.value) { const maxDateEn = maxDate.split('/'); const D2 = new Date(maxDateEn[2] + '-' + maxDateEn[1] + '-' + maxDateEn[0]); const D3 = new Date(control.value); if (D3.getTime() <= D2.getTime()) { return null; } else { return { maxDate: { message: (error, field) => { return `La date doit être avant le \"${maxDate}\"`; } } }; } } return null; }; } }