Мне нужно проверить дату контроля над рождаемостью реактивной формы, поэтому, если пользователь выбрал значение из будущего, чтобы отключить кнопку сохранения:
import { AbstractControl } from '@angular/forms';
export function validateDOB(control: AbstractControl)
{
let currentDateTime = new Date();
let monthValue = currentDateTime.getMonth()+1;
let formattedDate = currentDateTime.getFullYear() +'-'+ monthValue +'-'+currentDateTime.getDay();
let controlValue = control.value;
let monthOfControlValue = controlValue.getMonth()+1;
let FinalControlValue = controlValue.getFullYear()+'-'+monthOfControlValue+'-'+controlValue.getDay;
console.log(FinalControlValue)
if(formattedDate<control.value)
{
return {response: true};
}
return null;
}
Объяснение:
Я работаю с инструментом выбора даты углового материала, поэтому дата будет отображаться следующим образом:
Пн, 01 октября 2018 г., 00:00:00 GMT+0300 (восточноевропейское летнее время)
первые 3 строки получают текущую дату и преобразуют ее в формат YYYY-mm-dd
:
let currentDateTime = new Date();
let monthValue = currentDateTime.getMonth()+1;
let formattedDate = currentDateTime.getFullYear() +'-'+
monthValue +'-'+currentDateTime.getDay();
Последние 3 строки преобразуют дату, выбранную пользователем:
let monthOfControlValue = controlValue.getMonth()+1;
let FinalControlValue = controlValue.getFullYear()+'-'+monthOfControlValue+'-'+controlValue.getDay;
console.log(FinalControlValue )
На стороне пользователя любая дата, меньше или больше, проверка не будет работать.
Я пытался провести сравнение без преобразования в YYYY-mm-dd
, но это не сработало/не сработает.
Я изменил сценарий, изменив значение элемента управления на новую дату:
let controlValue = new Date(control.value);
А скрипт теперь такой:
import { AbstractControl } from '@angular/forms';
export function validateDOB(control: AbstractControl)
{
let currentDateTime = new Date();
let monthValue = currentDateTime.getMonth()+1;
let formattedDate = currentDateTime.getFullYear() +'-'+ monthValue +'-'+currentDateTime.getDay();
console.log(formattedDate)
let controlValue = new Date(control.value);
let monthOfControlValue = controlValue.getMonth()+1;
let FinalControlValue = controlValue.getFullYear()+'-'+monthOfControlValue+'-'+controlValue.getDay();
console.log(FinalControlValue)
if(formattedDate<control.value)
{
return {response: true};
}
return null;
}
И до сих пор не работает.
dateTransformed = this.datePipe.transform(date, 'yyyy-MM-dd');
- person veben   schedule 01.10.2018