我使用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()
会返回当前时间戳,但此处会将其转换为字符串。
答案 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)
});
上的文档
备注:'现在'可以代替日期传递,以便始终相对于当前日期进行比较,从而明确确保日期在过去或未来。