【发布时间】:2020-03-07 12:52:09
【问题描述】:
我正在努力设置一个正确的验证来验证两个日期输入和两个时间输入。到目前为止,这是我的 html 代码:
<div class="form-group">
<label for="name" class="control-label">Start date</label>
<input type="date" class="form-control" name="start_date">
</div>
<div class="form-group">
<label for="name" class="control-label">Start time</label>
<input type="time" class="form-control" name="start_time">
</div>
<div class="form-group">
<label for="name" class="control-label">End date</label>
<input type="date" class="form-control" name="end_date">
</div>
<div class="form-group">
<label for="name" class="control-label">End time</label>
<input type="time" class="form-control" name="end_time">
</div>
如您所见,您可以输入分开的开始日期和开始时间以及结束日期和结束时间。这可能会导致许多逻辑错误,例如结束日期 + 结束时间在开始时间 + 开始日期之前,或者结束日期在开始时间之前。
我想允许以下组合(如果没有设置 start_time,它应该自动设置为 00:00,如果没有设置 end_time,它应该自动设置为 23:59):
- 开始日期
- 开始日期和开始时间
- 结束日期
- 结束日期和结束时间
- 开始日期和结束日期
- 开始日期 & 开始时间 & 结束日期
- 开始日期和结束日期
- 开始日期 & 开始时间 & 结束日期 & 结束时间
这是我到目前为止所得到的验证器规则:
'start_date' => ['required_if:start_time,date_format:H:i', 'date', 'nullable'],
'start_time' => ['date_format:H:i', 'nullable'],
'end_date' => ['required_if:end_time,date_format:H:i', 'date', 'nullable'],
'end_time' => ['date_format:H:i', 'nullable'],
但是,它并没有真正起作用,我不知道如何完成它。关于如何解决我的问题的任何提示和想法?
在我验证了输入之后,开始和结束日期(+时间)也应该在逻辑上进行验证。开始日期 (+time) 必须早于结束日期 (+time)。
【问题讨论】:
-
为什么不使用
<input type="datetime-local">? -
如您所见,需要可以输入没有时间的日期!
-
允许 JS 处理连接是否更有意义?在提交之前,附加时间到日期并简单地验证时间戳格式和之前/之后的逻辑。我觉得您允许单独输入
date和time使这变得过于复杂。并且将date和time分别存储在数据库中将是一件令人头疼的事情...date和time可以从完全限定的时间戳中单独解析,但是如果它们是分开的则更难使用它们像这样。 -
出于安全原因,我需要并且必须在服务器端对其进行验证!
-
它仍然会...您将完全限定的时间戳发送为
start和end,而不是start_date、end_date、start_time和end_time。跨度>
标签: php laravel date validation datetime