碳/碳给我的问题

时间:2018-11-30 12:22:43

标签: php laravel php-carbon

您好,我正在尝试构建一个从今天开始过去7天绘制图表的应用程序,并且我正在使用Laravel 5-Carbon \ Carbon日期包。 因此,如果今天是星期三,它将在星期二结束 如果今天是星期五,它将在周三结束

    $now = Carbon::now();

    $ar = [];
    for($i=1; $i<7; $i++){
        array_push($ar, $now->subDays($i));
    }

    pr($ar, true);

其中pr()是类似于dd()的辅助函数,我写的只是以简单的方式进行转储,但我得到了此输出,首先要注意的是,要记住今天是-星期五, 2018年11月30日,2018-11-30

Array(
[0] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[1] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[2] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[3] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[4] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

[5] => Carbon\Carbon Object
    (
        [date] => 2018-11-09 12:23:53.793501
        [timezone_type] => 3
        [timezone] => UTC
    )

它应该继续到29日,28日,27日,但是它可以追溯到11月9日,甚至没有顺序,例如09、08、07、06、11月09日,我不知道我在说什么弄错了,请帮助我,谢谢。

3 个答案:

答案 0 :(得分:2)

在碳对象上使用函数时,对象将更新自身并返回对该对象的引用。因此,您的$ar数组包含对同一对象的多个引用。每次使用subDays时,实际上是在更新数组中的每个对象。

如果要用不同的碳对象填充数组,则每次都必须创建一个新实例。例如,像这样:

$ar = [];
for($i=1; $i<7; $i++){
    array_push($ar, now()->subDays($i));
}

now()是Laravel中的一个辅助函数,它返回Carbon::now()的新实例。

答案 1 :(得分:0)

$ar = [];
for($i=1; $i<7; $i++){
    $now = Carbon::now();
    $ar[] = $now->subDays($i);
}

每天次日致电,Carbon都会更新其实例,因此您需要重新初始化。

答案 2 :(得分:0)

$day = Carbon::today();

$ar = [];

for($i=1; $i<=7; $i++){
 array_push($ar, $day);
 $day->subDay(1);
}

这里$day->subDay(1);方法正在修改对象值本身减去1,而不是返回修改后的值。