在循环内迭代碳日期

Iterating Carbon date inside loop

在我的 Laravel 项目中,我想动态创建接下来 7 天的数组。我有以下设置:

    $pickup_dates = [];
    $today = Carbon::today();
    for ($i = 0; $i < 7; $i++) {
      $pickup_dates[] = $today->addDay();
    }
    dd($pickup_dates);

但是当我使用 dd 转储数据时,我的输出如下:

Array
(
[0] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

[1] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

[2] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

[3] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

[4] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

[5] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

[6] => Carbon\Carbon Object
    (
        [date] => 2017-08-09 00:00:00.000000
        [timezone_type] => 3
        [timezone] => UTC
    )

)

如您所见,它输出相同的日期,但我想要接下来 7 天的日期序列。我想要实现的是:

你能告诉我这段代码有什么问题吗?或者还有其他方法可以实现吗?

您需要确保让 carbon 知道您要添加多少天:

$pickup_dates[] = $today->addDays($i);

或更少的 eloquent 方式:

$today = $today->addDay(); $pickup_dates[] = $today;

这两个都需要在循环中完成。

您正在使用相同的 Carbon 对象,这就是为什么您会这样。

试试这个

$pickup_dates = [];
$today = Carbon::today()->toDateString();
for ($i = 0; $i < 7; $i++) {
    $pickup_dates[]=Carbon::parse($today);
      $today = Carbon::parse($today)->addDay()->toDateString();
}
dd($pickup_dates);

输出为

这更干净:

$pickup_dates = [];
for ($i=0; $i<7; $i++) {
  $pickup_dates[] = Carbon::now()->addDays($i);
}
dd($pickup_dates);