Php 未传递对变量的碳赋值

Php 未传递对变量的碳赋值,php,laravel,php-carbon,Php,Laravel,Php Carbon,我在视图中设置了两个日期选择器;一个用于开始日期,一个用于结束日期。 请求被传递到控制器索引方法,在该方法中,它与该if块交互 如果我设置了开始日期,例如4月1日,我希望: $start\u date==2017-04-01 00:00:00 $end\u date==2017-04-08 00:00:00(一周后) 但是当我在块之后运行dd($start\u time.'.$end\u time)时,它会返回 2017-04-08 00:00:00 2017-04-08 00:00:00

我在视图中设置了两个日期选择器;一个用于开始日期,一个用于结束日期。 请求被传递到控制器索引方法,在该方法中,它与该
if
块交互

如果我设置了开始日期,例如4月1日,我希望:

  • $start\u date==2017-04-01 00:00:00
  • $end\u date==2017-04-08 00:00:00
    (一周后)
但是当我在块之后运行
dd($start\u time.'.$end\u time)
时,它会返回

  • 2017-04-08 00:00:00 2017-04-08 00:00:00
//如果未超过开始或结束日期,请将预订设置为查看下一周
if(isset($request->start\u date)和&isset($request->end\u date))
{
$start\u date=Carbon::parse($request->start\u date);
$end\u date=Carbon::parse($request->end\u date);
如果($start\u date->diffInDays($end\u date,false)<1)
{
return redirect()->route('bookings.index')->带有('errors','请在开始日期之后选择一个结束日期);
}
}
else if(设置($request->start\u date))
{
$start\u date=Carbon::parse($request->start\u date);
$end_date=$start_date->addWeek();
}
else if(设置($request->end_date))
{
$end\u date=Carbon::parse($request->end\u date);
$start_date=($end_date->subWeek());
}
其他的
{
$start_date=碳::现在();
$end_date=Carbon::now()->addweek();
}

这里可能发生了什么?

代码中出现的问题是因为碳对象是可变的

它基本上意味着当您执行
$end\u date=$start\u date->addWeek()开始日期和结束日期都是相同的对象

因此,您可以
开始日期
克隆到
结束日期
,然后对其调用方法

解决办法应该是

//如果未超过开始或结束日期,请将预订设置为查看下一周
if(isset($request->start\u date)和&isset($request->end\u date))
{
$start\u date=Carbon::parse($request->start\u date);
$end\u date=Carbon::parse($request->end\u date);
如果($start\u date->diffInDays($end\u date,false)<1)
{
return redirect()->route('bookings.index')->带有('errors','请在开始日期之后选择一个结束日期);
}
}
else if(设置($request->start\u date))
{
$start\u date=Carbon::parse($request->start\u date);
$end_date=克隆$start_date;
$end_date=$end_date->addWeek();
}
else if(设置($request->end_date))
{
$end\u date=Carbon::parse($request->end\u date);
$start\u date=克隆$end\u date;
$start_date=$start_date->subWeek();
}
其他的
{
$start_date=碳::现在();
$end_date=Carbon::now()->addweek();
}

调试提示是在每次分配后回显开始日期和结束日期。查看值错误更改的位置为了澄清,我触发了第一个
else if
语句,因此两行上只发生了两个赋值
   // If start or end date is not passed, set the bookings to view the upcoming week
    if (isset($request->start_date) && isset($request->end_date))
    {
        $start_date = Carbon::parse($request->start_date);
        $end_date = Carbon::parse($request->end_date);
        if ($start_date->diffInDays($end_date, false) < 1 )
        {
            return redirect()->route('bookings.index')->with('errors', 'Please choose an end date <strong>after</strong> start date!');
        }

    }
    else if (isset($request->start_date))
    {
        $start_date = Carbon::parse($request->start_date);
        $end_date = clone $start_date;
        $end_date = $end_date->addWeek();
    }
    else if (isset($request->end_date))
    {
        $end_date = Carbon::parse($request->end_date);
        $start_date= clone $end_date;
        $start_date= $start_date->subWeek();
    }
    else
    {
        $start_date = Carbon::now();
        $end_date = Carbon::now()->addweek();
    }