Отметка времени Joi unix устанавливает максимальное значение

Я использую пакет Joi для проверки поля метки времени, но как установить значение max() для это, я хочу, чтобы входная временная метка была меньше, чем текущая временная метка

var schema = Joi.object().keys({
    t: Joi.date().timestamp('unix').max(moment().unix()),
})

но я получаю сообщение об ошибке:

дочерний "t" не работает, потому что ["t" должно быть меньше или равно "Sun 18 Jan 1970 07:35:17 GMT+0330 (IRST)"]

Я уверен, что moment().unix() возвращает текущую метку времени, но здесь она приводится к строке.


person Salar    schedule 04.01.2017    source источник


Ответы (2)


Кажется, что функции max() и min() могут помочь, но они работают, только если порог указан в миллисекундах.

t: Joi.date().timestamp('unix')
.max(moment().unix() * 1000)
.min(moment().subtract('42', 'weeks').unix() * 1000),
person Amin Fazlali    schedule 29.04.2019
comment
Вы также можете сделать moment().valueOf(), что даст вам результат в миллисекундах — см. документацию: momentjs .com/docs/#/displaying/unix-timestamp-milliseconds - person Max; 15.05.2019

Не похоже, что Joi.date().max() правильно принимает временные метки unix, несмотря на возможность указать в вашей схеме, что для входящих значений ожидается временная метка unix.

Если вам нужно использовать текущую дату в вашей схеме, вы можете передать строку 'now' вместо использования даты. Или просто убедитесь, что вы вводите текущую дату в формате, ожидаемом .max(). Я попробовал это, используя миллисекунды, и, похоже, он работает так, как ожидалось. Я думаю, что Джой использует конструктор Date по умолчанию под капотом для создания дат для сравнения, которые ожидают миллисекунды.

var schema = Joi.object().keys({
    t: Joi.date().timestamp('unix').max(moment().unix() * 1000)
});

Из документации на date.max()

Примечания: «сейчас» можно передать вместо даты, чтобы всегда сравнивать относительно текущей даты, что позволяет явно убедиться, что дата находится либо в прошлом, либо в будущем.

person Cuthbert    schedule 09.01.2017