You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Timestamp验证:如何确保starts_at和expires_at为有效时间戳?

如何确保starts_at和expires_at为有效时间戳?

你可以通过以下几种方式强化验证规则,确保这两个字段是有效的Unix时间戳:

方法1:使用Laravel自带的date:U验证规则

Laravel的date验证规则支持指定格式为U(代表Unix时间戳),会自动校验输入的整数能否转换为合法的日期时间,避免无效的超大/超小整数通过验证。修改后的规则如下:

$rules = [
    'user_id' => 'required|int|exists:users,id',
    'starts_at' => 'required|date:U|min:1',
    'expires_at' => 'required|date:U|gt:starts_at',
];

如果需要额外限制时间范围(比如开始时间必须在当前时间之后),可以添加after:now这类规则:

'starts_at' => 'required|date:U|after:now',
'expires_at' => 'required|date:U|after:starts_at',

方法2:自定义验证规则(适合特殊业务需求)

如果需要更灵活的校验逻辑(比如限制时间戳不能超过未来10年),可以使用闭包或自定义规则:

use Carbon\Carbon;

$rules = [
    'user_id' => 'required|int|exists:users,id',
    'starts_at' => [
        'required',
        'int',
        'min:1',
        function ($attribute, $value, $fail) {
            // 验证是否为有效时间戳,同时限制不能早于当前时间
            $timestamp = Carbon::createFromTimestamp($value);
            if (!$timestamp->isValid() || $timestamp->lt(Carbon::now())) {
                $fail($attribute . ' 必须是有效的、不早于当前时间的时间戳');
            }
        },
    ],
    'expires_at' => [
        'required',
        'int',
        'gt:starts_at',
        function ($attribute, $value, $fail) {
            $timestamp = Carbon::createFromTimestamp($value);
            if (!$timestamp->isValid()) {
                $fail($attribute . ' 必须是有效的时间戳');
            }
        },
    ],
];

这种方式可以根据业务需求定制校验逻辑,比如添加时间范围限制、时区校验等。

内容的提问来源于stack exchange,提问作者EA_Hub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:01:27