在循环内迭代碳日期
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 天的日期序列。我想要实现的是:
- 2017-08-03
- 2017-08-04
- 2017-08-05
- 2017-08-06
- 2017-08-07
- 2017-08-08
- 2017-08-09
你能告诉我这段代码有什么问题吗?或者还有其他方法可以实现吗?
您需要确保让 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);
在我的 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 天的日期序列。我想要实现的是:
- 2017-08-03
- 2017-08-04
- 2017-08-05
- 2017-08-06
- 2017-08-07
- 2017-08-08
- 2017-08-09
你能告诉我这段代码有什么问题吗?或者还有其他方法可以实现吗?
您需要确保让 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);