您好,我正在尝试构建一个从今天开始过去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日,我不知道我在说什么弄错了,请帮助我,谢谢。
答案 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,而不是返回修改后的值。