Условие на дату, вводимую пользователем 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 шт):
Создайте 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 {
// Если прошло больше
}
Итак, нашел способ ограничить ввод данных средствами 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 дней, то пользователь возвращается на экран назад для ввода правильной даты. В остальных случаях переходит на следующий экран сценария.