Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用laravel验证小时数_Php_Laravel_Validation - Fatal编程技术网

Php 使用laravel验证小时数

Php 使用laravel验证小时数,php,laravel,validation,Php,Laravel,Validation,我有这个帖子: { “门店id”:“e422ecfe-4061-4cbd-adc2-364122959dac”, “开放时间”:[ { “id”:“a3489e0f-aaf9-44a7-8af7-4225c25cb40e”, “门店id”:“e422ecfe-4061-4cbd-adc2-364122959dac”, “天”:1, “time\u slot1\u closed”:false, “开始时间”:“12:34”, “时差1\u结束”:“13:32”, “时间间隔2\u关闭”:false

我有这个帖子:

{
“门店id”:“e422ecfe-4061-4cbd-adc2-364122959dac”,
“开放时间”:[
{
“id”:“a3489e0f-aaf9-44a7-8af7-4225c25cb40e”,
“门店id”:“e422ecfe-4061-4cbd-adc2-364122959dac”,
“天”:1,
“time\u slot1\u closed”:false,
“开始时间”:“12:34”,
“时差1\u结束”:“13:32”,
“时间间隔2\u关闭”:false,
“时间间隔2开始”:空,
“时间间隔2结束”:空,
“评论”:“暂时性精神病研究所”的意见
}
]
}
我想验证“time\u slot1\u end”是否在“time\u slot1\u start”之后。为此,我有以下规则:

返回[
'store_id'=>'必需|存在:stores,id',
“开放时间。*.day'=>”必填项|介于:1,7'之间,
'开放时间。*.time\u slot1\u start'=>'可为空|日期_格式:H:i',
“开放时间。*.time_slot1_end”=>“可空|日期|格式:H:i |之后:time_slot1_start”,
...
];
验证失败。我有一个错误:

{
“消息”:“给定的数据无效。”,
“错误”:{
“营业时间.0.时间段1\u结束”:[
“开放时间\u hours.0.time\u slot1\u end必须是时间slot1 start之后的日期。”
]
}
}

我尝试了很多组合,但都没有成功。我的错误是什么?

可能是将值读取为字符串。尝试获取时间段的值,并在验证之前将其转换为日期类型

date('H:i', strtotime(time_slot1_start))
date('H:i', strtotime(time_slot1_end))
您可以编写一个函数来检查您喜欢的任何值。我们可以对字符串进行简单的比较,因为它们在早上的时间上总是有前导零

返回[
'store_id'=>['required','exists:stores,id'],
“开放时间。*.day”=>[“必需”,“介于:1,7'],
'开放时间。*.time\u slot1\u start'=>['nullable','date\u格式:H:i'],
'营业时间。*.time\u slot1\u end'=>[
“可为空”,
'日期\格式:H:i',
函数($k、$v、$f){
//从开放时间中取出0。0。时间槽\u 1\u结束
$key=explode(“.”,$k)[1];
如果($v开放时间[$key][“时间-时间-开始”]){
$f(“时间段$key end必须在开始时间之后”);
}
},
],
];

验证后规则可能仅适用于日期。因此,您可以尝试将
date\u格式:H:i
替换为
date
Hi Donkarnash。我已经试过了。没有成功:“不是一个有效的日期”。然后你可能应该尝试尝试编写一个自定义验证规则Hi miken32。我尝试了你的建议,但没有成功。当我发布time\u slot1\u start:“08:00”,time\u slot1\u end:“12:00”时,响应为:开始时间\u hours.0。time\u slot1\u end必须大于time slot1 start字符。(注意响应中的单词字符…)。不过还是要谢谢你。更新后的答案还好吗?嗨,miken32,你的解决方案很好用。不幸的是,本机日期函数在这种情况下不起作用。谢谢