Условие на дату, вводимую пользователем JavaScript (Aimylogic)

Для сдачи заявления в ФНС на патент нужно ограничить пользователя, чтобы он не смог ввести дату раньше 10 рабочих дней от текущей даты. По правилам заявление должно вступать в действие через 10 рабочих дней со дня подачи. Подскажите как это сделать средствами JavaScript.

Дата, которую вводит пользователь хранится в следующих систем переменных Aimylogic. $DATETIME.day, $DATETIME.month, $DATETIME.year

можно получить текущий день или дату и допустим записать его в переменную $TODAY.day, $TODAY.month, $TODAY.year.

Нужно JS условие ограничивающее ввод даты раньше чем чем за 10 дней от текущей.

что-то типа такого: $DATETIME.day < $TODAY.day + 14, то пользователь возвращается к экрану ввода, в остальном случае сценарий идет далее.


Ответы (2 шт):

Автор решения: SwaD

Создайте 2 функции. Одну для создания даты и приведения даты в миллисекунды(unixtimestamp), вторую для сравнения:

/**
 * Возвращает unixTimeStamp даты
 * @param {number} y Год
 * @param {number} m Месяц
 * @param {number} d День
 * @return {number}
 */
function buildDate(y, m , d) {
  return new Date(y, m, d, 0, 0, 0, 0).getTime();
}

/**
 * Функция для сравнения дат разницы дат с заданным периодом
 * Возвращает true если прошло меньше заданного времени, иначе false
 * @param {number} yD Введенны год
 * @param {number} mD Введенный месяц
 * @param {number} dD Введенный день
 * @param {number} yT Текущий год
 * @param {number} mT Текущий месяц
 * @param {number} dT Текущий день
 * @param {number} dayLeft Действительно дней
 * @return {boolean}
 */
function checkDate(yD, mD, dD, yT, mT, dT, dayLeft) {
  return buildDate(yD, mD, dD) - buildDate(yT, mT, dT) < dayLeft * 86400000;
}

86400000 - количество миллисекунд в 1 дне

Вызываем функцию:

const result = checkDate($DATETIME.year, $DATETIME.month, $DATETIME.day, $TODAY.year, $TODAY.month, $TODAY.day, 10);
if (result) {
  // Если дней меньше заданного периода 
} else {
  // Если прошло больше
}
→ Ссылка
Автор решения: IndieDev

Итак, нашел способ ограничить ввод данных средствами Aimylogic. Получаем текущую дату Это можно сделать тремя способами:

  • классическим через $d = (new Date()).getDate();
  • через monent js $d = moment().format('dd');
  • через http запрос http://tools.aimylogic.com/api/now?tz=Europe/Moscow&format=dd/MM/yyyy Данные приходят в формате JSON мы их парсим и записываем в переменную. $d = $httpResponse.day

В сценарии после ввода даты ставим условия на ее ограничение: $DATETIME.day < $d + 14. В $DATETIME.day хранится число введенное клиентом в чатботе. Мы прописываем, что если это число меньше текущего числа + 14 дней, то пользователь возвращается на экран назад для ввода правильной даты. В остальных случаях переходит на следующий экран сценария.

→ Ссылка