php - 如何在 Laravel 5 中根据单独的日、月、年输入验证输入日期

标签 php date laravel-5

我有一个用户注册表单,它将输入的生日分为 3 个不同的输入字段,即日、月、年

{!! Form::selectMonth('month', null) !!}
{!! Form::selectRange('day', 1, 31, null) !!}
{!! Form::selectYear('year', Carbon\Carbon::now()->year, (new Carbon\Carbon('100 years ago'))->year, null) !!}

在后端,我修改了 Registrar.php/validator() 以检查输入日期是否有效:

public function validator(array $data) {

    $data['date_of_birth'] = Carbon::create($data['year'], $data['month'], $data['day'], 0, 0, 0)->toDateString();
    $current_year          = Carbon::now()->year;
    $hundred_years_ago     = (new Carbon("100 years ago"))->year;

    return Validator::make($data, [
        'year'          => 'Required|Integer|Between:'.$hundred_years_ago.','.$current_year,
        'month'         => 'Required|Integer|Between:1,12',
        'day'           => 'Required|Integer|Between:1,31',
        'date_of_birth' => 'Required|Date',
    ]);

}

但它肯定不会检查是否提供了无效日期。如果用户提供了无效日期,例如 1982 年 2 月 31 日Carbon::create() 会将日期转换为 1982 年 3 月 3 日事实证明这是一个有效的。

如果我想过滤这种类型的日期输入,我需要做什么?我确实相信,对于那些不使用某种日期选择器的人来说,这可能是一个非常常见的要求。

最佳答案

Laravel 使用 strtotimecheckdate 函数 validate a date .

Laravel 的 validateDate 函数如何工作?一个例子:

strtotime('30-2-2015'); // returns a timestamp
checkdate(2, 30, 2015); // returns false
// laravel raises an error

因此,$data['date_of_birth']的值应该是特定格式的字符串

public function validator(array $data)
{
    $data['date_of_birth'] = $data['day'].'-'.$data['month'].'-'.$data['year'];
    $current_year          = Carbon::now()->year;
    $hundred_years_ago     = (new Carbon("100 years ago"))->year;

    return Validator::make($data, [
        'year'          => 'Required|Integer|Between:'.$hundred_years_ago.','.$current_year,
        'date_of_birth' => 'Required|Date',
    ]);
}

您还可以忽略的验证,因为日期将被验证。

关于php - 如何在 Laravel 5 中根据单独的日、月、年输入验证输入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866079/

相关文章:

php - ajax js序列化不读取表单元素

php - 如何在 PHP 中为类方法起别名?

java - 解析HH :mm:ss from CSV file

mysql 以年表示的日期之间的差异

带子方法的 Laravel artisan 命令

php - Laravel 5 强制 HTTPS 问题,登录路由到 HTTP

php - Laravel 5 的 CKFinder 身份验证问题

php - 使用 PHP 将文件上传到 MySql 数据库

php - 如何从 php 向 Android 发送通知?

Java SQL 从日期中减去一个小时