如何在注册时查看用户的年龄?我想将最低年龄设定为13岁。我询问用户的出生日期,当我验证其他凭据时,我想检查他们实际上是13 +。
我的用户模型的摘录如下所示:
$rules = [
'name' => 'required|alpha|min:1',
'email' => 'required|email|unique:users',
'dob' => 'required|date'
];
如何检查输入的日期是否在13年前或更长时间?
我已经看到我可以使用Laravel Docs中的before:yyy-mm-dd
规则,如下所示:
$rules = [
'name' => 'required|alpha|min:1',
'email' => 'required|email|unique:users',
'dob' => 'required|date|before:2001-04-15'
];
答案 0 :(得分:16)
检查日期是否大于(年龄)大于N年的简单方法是将before
规则设置为减去N 年。
$rules = [
'dob' => 'required|date|before:-13 years',
]
答案 1 :(得分:11)
RMcLeod的回答没问题,但我建议您将其解压缩为自定义规则:
Validator::extend('olderThan', function($attribute, $value, $parameters)
{
$minAge = ( ! empty($parameters)) ? (int) $parameters[0] : 13;
return (new DateTime)->diff(new DateTime($value))->y >= $minAge;
// or the same using Carbon:
// return Carbon\Carbon::now()->diff(new Carbon\Carbon($value))->y >= $minAge;
});
通过这种方式,您可以将规则用于您喜欢的任何年龄:
$rules = ['dob' => 'olderThan']; // checks for 13 years as a default age
$rules = ['dob' => 'olderThan:15']; // checks for 15 years etc
答案 2 :(得分:4)
这有点旧,但我想分享我这样做的方式。
public function rules()
{
return
[
...
'age' => 'required|date|before_or_equal:'.\Carbon\Carbon::now()->subYears(18)->format('Y-m-d'),
...
];
}
使用before
很不错但对最终用户来说有点难看,因为如果今天是他的生日,他将无法通过。使用before_or_equal
,您可以获得完美的行为。如果您针对全球观众,那么改善这种情况的方法就是使用Carbon检查时区。