首页 > 解决方案 > Laravel保存的输入字段:仅添加日期时存储日期时间

问题描述

目标:

我希望从用户只能在文本字段中放置日期的文本字段中保存开始日期11/11/2021 00:00:00和结束日期11/12/2021 23:59:59(只能更改日期):

<div class="row" id="custom_date">
  <div class="col-md-4">
    <p class="font-weight-bold">From:</p>
  </div>
  <div class="col-md-8">
    <input type="date" id="custom_start_datetime" name="custom_start_datetime">
  </div>
  <div class="col-md-4">
    <p class="font-weight-bold">To:</p>
  </div>
  <div class="col-md-8">
    <input type="date" id="custom_end_datetime" name="custom_end_datetime">
  </div>
 </div>

我的商店功能片段:

            $shift->effective_start_datetime = $request_add->input('effective_start_datetime'); 
            $shift->effective_end_datetime = $request_add->input('effective_end_datetime'); 

上面的代码给出了一个错误,因为该行在timestamp without time zone并且它从文本字段中获取数据,这些数据只包含日期而不是时间。

我可以在我的功能代码中更改什么以保存日期,但它可以自动保存为 h/m/ s00:00:00格式?start_datetime23:59:59 end_datetime

例如,如果我在两个文本字段中输入,08/11/2021它将08/13/2021被保存为:08/11/2021 00:00:0008/13/2021 23:59:59

标签: phpsqllaravelfunctiondatetime

解决方案


您可以使用 Carbon 类来操作您的日期,因此,如果您想放置时间,您可以使用parsemethod 和 use startOfDayand endOfDaymethods 。

例子:

$startDate = Carbon::parse($firstDate)->startOfDay();  // Will return a Carbon Instance at 00:00:00
$endDate = Carbon::parse($secondDate)->endOfDay();  // Will return a Carbon Instance at 23:59:59

这些方法将解决您的问题,如果您需要时区,您可以使用andtoISOString之后的方法,这是 API 响应的默认格式。startOfDayendOfDay

$endDate = Carbon::parse($secondDate)->endOfDay()->toISOString();  // 2021-08-12T23:21:54.788279Z

推荐阅读