【问题标题】:Joi unix timestamp set max valueJoi unix时间戳设置最大值
【发布时间】:2017-05-18 11:28:29
【问题描述】:

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

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

但我得到的错误是:

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

我确定 moment().unix() 返回当前时间戳,但在这里它被转换为字符串。

【问题讨论】:

    标签: momentjs joi


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    看起来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()上的文档

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

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 2012-07-25
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2013-03-23
      • 2021-02-12
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多