5

我正在使用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()返回当前时间戳,但在这里它被转换为字符串。

4

2 回答 2

2

似乎max()andmin()函数可以解决问题,但它们只有在以毫秒为单位指定阈值时才有效。

t: Joi.date().timestamp('unix')
.max(moment().unix() * 1000)
.min(moment().subtract('42', 'weeks').unix() * 1000),
于 2019-04-29T08:34:40.637 回答
0

Joi.date().max()尽管能够在您的架构中指定传入值需要一个 unix 时间戳,但它看起来并没有正确接受 unix 时间戳。

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

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

来自date.max()上的文档

注意:可以传递“现在”来代替日期,以便始终与当前日期进行比较,从而明确确保日期是过去还是将来。

于 2017-01-09T21:24:26.737 回答