@vasiliy763
IT engineer

Как сравнить две даты?

Есть 2 поля Дата Закупки (можно установить вручную) и Дата создания (фиксировано проставляется дата создания задачи) . Для поля Дата Закупки необходимо прописать 3 условия:
• Необходимо чтобы поле Дата Закупки, невозможно было выбрать меньше чем даты указанной в поле Дата создания.
• Дата Закупки не может быть больше чем 120 дней от Даты создания.
• Поле Дата Закупки можно изменить только 1 раз.

Пробовал реализовать первое условие написав код ниже, но ошибка ('Дата закупки не может быть указана в прошлом') почему-то не появляется .
Если кто то подскажет где я допустил ошибку я буду рад.
form.onChange(['Дата создания', 'Дата Закупки'])
  .validate('Дата Закупки', state => {
    const [start, end] = state.changes;

    if (!start || !end)
      return null;

    if (start.date && end.date && end.date < start.date)
      return {
        errorMessage: 'Дата закупки не может быть указана в прошлом'
      };

    return null;
  });
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ответы на вопрос 1
ronnie85
@ronnie85
Fullstack Dev
Могу предложить как вариант сравнения дат.
const diffDate = (date, date2) => {

        try 
        {
            date = date instanceof Date ? date : new Date(date); 
            date2 = date2 instanceof Date ? date2 : new Date(date2);
        } 

        catch (e) 
        {
            console.log(e);
        }

        return date < date2;
    };

        const rangeDays = 120;
        const createDate = new Date('2022-06-29T15:00:00'); // Строка в формате <input type="datetime" />
        const rangeDate = new Date(createDate.getTime() + (1000*60*60*24*rangeDays));
        const choiceDate = new Date('2022-11-25T15:00:00'); 

        if (!diffDate(createDate, choiceDate) || !diffDate(choiceDate, rangeDate)) {
            console.log('Invalid choosen date.');
            return;
        }

        console.log('[debug][dates]', {
            createDate: createDate.toString(),
            choiceDate: choiceDate.toString(),
            rangeDate: rangeDate.toString()
        });
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы