我正在尝试在我正在创建的日历类型的东西中制作一些导航按钮,并且我使用碳来创建日期.
这是控制器中的代码:
if ($date == null) { $date = \Carbon\Carbon::now(); } else { $date = \Carbon\Carbon::createFromFormat('Y-m-d', $date); } $navDays = [ '-7Days' => $date->subDay('7')->toDateString(), '-1Day' => $date->subDay('1')->toDateString(), 'Today' => $date->today()->toDateString(), '+1Day' => $date->addDay('1')->toDateString(), '+7Days' => $date->addDay('7')->toDateString() ];
然后我认为,我这样做:
@foreach($navDays as $key => $i)
这个问题是,碳似乎在数组创建期间改变了$ date,因为这些是我得到的日期($ date设置为2015-11-29):
有谁知道我做错了什么?
关心约翰
当您针对Carbon对象运行这些方法时,它会更新对象本身.因此,addDay()
将碳的价值提前一天.
这是你需要做的:
$now = Carbon::now(); $now->copy()->addDay(); $now->copy()->addMonth(); $now->copy()->addYear(); // etc...
复制方法实际上创建了一个新的Carbon对象,然后您可以应用更改而不影响原始$now
变量.
查看文档:https://carbon.nesbot.com/docs/
问题是你假设subDay()/ addDay()不改变日期对象,而他们做....他们只是围绕DateTime
对象modify()
方法:
DateTime :: modify - date_modify - 更改时间戳
(我的重点)
相反,使用
$navDays = [ '-7Days' => (clone $date)->subDay('7')->toDateString(), '-1Day' => (clone $date)->subDay('1')->toDateString(), 'Today' => (clone $date)->today()->toDateString(), '+1Day' => (clone $date)->addDay('1')->toDateString(), '+7Days' => (clone $date)->addDay('7')->toDateString() ];