Joi unix时间戳设置最大值

时间:2017-01-04 08:30:40

标签: momentjs joi

我使用Joi包验证时间戳字段,但如何在其上设置max()值,我希望输入时间戳小于当前时间戳

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

但我得到的错误是:

  

孩子" t"失败是因为[" t"必须小于或等于" Sun Jan 18   1970 07:35:17 GMT + 0330(IRST)"]

我确定moment().unix()会返回当前时间戳,但此处会将其转换为字符串。

2 个答案:

答案 0 :(得分:1)

似乎max()min()函数可以达到目的,但只有在阈值以毫秒为单位的情况下,它们才起作用。

t: Joi.date().timestamp('unix')
.max(moment().unix() * 1000)
.min(moment().subtract('42', 'weeks').unix() * 1000),

答案 1 :(得分:0)

尽管能够在您的架构中指定预期传入值的unix时间戳,但Joi.date().max()仍然无法正确接受unix时间戳。

如果您需要在架构中使用当前日期,则可以传递字符串'now',而不是使用日期。或者只是确保以.max()期望的格式输入当前日期。我尝试使用毫秒,它似乎按预期工作。我认为Joi正在使用默认的Date构造函数来构造日期以比较预期的毫秒数。

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

来自date.max()

上的文档
  

备注:'现在'可以代替日期传递,以便始终相对于当前日期进行比较,从而明确确保日期在过去或未来。