当前位置:  开发笔记 > 编程语言 > 正文

碳改变了我原来的变量

如何解决《碳改变了我原来的变量》经验,为你挑选了2个好方法。

我正在尝试在我正在创建的日历类型的东西中制作一些导航按钮,并且我使用碳来创建日期.

这是控制器中的代码:

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)
    
  • {{ $key }}
  • @endforeach

    这个问题是,碳似乎在数组创建期间改变了$ date,因为这些是我得到的日期($ date设置为2015-11-29):

    
    

    有谁知道我做错了什么?

    关心约翰



    1> diggersworld..:

    当您针对Carbon对象运行这些方法时,它会更新对象本身.因此,addDay()将碳的价值提前一天.

    这是你需要做的:

    $now = Carbon::now();
    
    $now->copy()->addDay();
    $now->copy()->addMonth();
    $now->copy()->addYear();
    // etc...
    

    复制方法实际上创建了一个新的Carbon对象,然后您可以应用更改而不影响原始$now变量.

    查看文档:https://carbon.nesbot.com/docs/



    2> Mark Baker..:

    问题是你假设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()
    ];
    


    carbon也有一个复制方法,所以你可以做类似的事情.. $ date-> copy() - > subDay('7') - > toDateString()
    推荐阅读
    手机用户2402851335
    这个屌丝很懒,什么也没留下!
    DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
    Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有