使用Carbon将时间字段添加到当前日期字段

时间:2018-08-17 11:59:08

标签: php laravel datetime php-carbon

问题:我正在Laravel中创建某种待办事项应用程序,因此用户创建的每项待办事项都会有一个给定的时间来指示用户何时执行以下操作:做必须完成。现在,我有2个输入字段,其中1个用于日期,而1个用于特定时间。我想将输入的时间添加到日期输入中,并在完成输入后将其存储在数据库中

问题:如何将时间字段值添加到日期值?

代码:

输入字段:

{{Form::date('date', \Carbon\Carbon::today(),['class' => 'form-control mb-2 mr-sm-2 mb-sm-0'])}}
{{Form::time('time', \Carbon\Carbon::now()->timezone('Europe/Brussels')->format('H:i'),['class' => 'form-control'])}}

用户要添加任务时的“我的商店”功能:

 public function store(Request $request)
 {

    $this ->validate($request, ['title' => 'required|max:25','description' => 'required|max:60']);

    $task = new Task;
    $task -> title = $request->input('title');
    $task -> description = $request->input('description');
    $task -> end_date = $request->input('date');
    $task -> user_id = auth()->id();
    $task->save();

    return redirect('/tasks')->with('success', 'Task created');
 }

我的Task.php模型,我尝试在其中操纵'end_date'属性:

    public function setEndDateAttribute($date) 
    {

    $this->attributes['end_date'] = Carbon::createFromFormat('Y-m-d', $date);

    }

我得到的结果:将日期添加到数据库中,但是使用上述功能,我得到了创建任务的日期+当前时间。我想用输入的时间值代替当前时间

2 个答案:

答案 0 :(得分:1)

您必须更改格式,

Carbon::createFromFormat('Y-m-d', $date);

将仅获得输入的年,月和日,但是您还需要数小时,数分钟(甚至几秒钟)。因此,您必须像这样更改代码:

Carbon::createFromFormat('Y-m-d H:i:s', $date);

无论如何,如果您在模型中设置$dates属性,请看一下official documentation

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = ['deleted_at'];

如果将列添加到此数组,将自动返回Carbon\Carbon对象。

更新:

在您的表单中,您有2个输入:datetime,因此您有2个选择:

  • 就像我在评论中说的那样,不要使用表单构建器
  • 将这2个输入合并到单个Carbon对象中...

因此您的代码必须从以下位置更改:

$task -> end_date = $request->input('date');

收件人:

$task -> end_date = $request->input('date') . ' ' . $request->input('time');

并且必须如上所述更改增幅器。

答案 1 :(得分:0)

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
 protected $dates = ['end_date'];


 // Check if a valide DateTime can be created

 if ((bool)\DateTime::createFromFormat('d/m/Y H:i',  $request->input('date') . ' '. $request->input('time') )) {

 // Store it in database     

 $task -> end_date = Carbon::createFromFormat('d/m/Y H:i', $request->input('date') . ' '. $request->input('time'))->toDateTimeString();

 }