Php 获取最近30天的所有日期(datetime对象)
我试图获得一个datetime对象数组,但失败得很惨 我想记录今天的日期,并获取过去30天内的所有日期Php 获取最近30天的所有日期(datetime对象),php,datetime,Php,Datetime,我试图获得一个datetime对象数组,但失败得很惨 我想记录今天的日期,并获取过去30天内的所有日期 $today = new DateTime(); $begin = $today->sub(new DateInterval('P30D')); $interval = new DateInterval('P1D'); // 1 Day $dateRange = new DatePeriod($begin, $interval, $today); $range = []; forea
$today = new DateTime();
$begin = $today->sub(new DateInterval('P30D'));
$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $today);
$range = [];
foreach ($dateRange as $date) {
$range[] = $date->format('Y-m-d');
}
当我转储$range
时,我得到一个空数组
我做错了什么?改变
$begin = $today->sub(new DateInterval('P30D'));
到
改变
$begin = $today->sub(new DateInterval('P30D'));
到
您覆盖了
$today
,因此$today
和$begin
完全相同
$today = new DateTime();
$copy = clone $today;
$begin = $copy->sub(new DateInterval('P30D'));
$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $today);
$range = [];
foreach ($dateRange as $date) {
$range[] = $date->format('Y-m-d');
}
将起作用您覆盖
$today
,因此$today
和$begin
完全相同
$today = new DateTime();
$copy = clone $today;
$begin = $copy->sub(new DateInterval('P30D'));
$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $today);
$range = [];
foreach ($dateRange as $date) {
$range[] = $date->format('Y-m-d');
}
“sub”方法修改源对象,并将对象本身作为返回值输出(实际上这是用于方法链接)。它不仅仅是用新的日期创建一个新对象
$begin = $today->sub(new DateInterval('P30D'));
修改$today
并输出一个副本,然后将其声明为$begin
。这会导致两个对象具有相同的日期,因此没有迭代的时间间隔
看
您需要为结束日期创建一个单独的对象:
$begin = new DateTime();
$begin->sub(new DateInterval('P30D'));
$end = new DateTime();
$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $end);
$range = [];
foreach ($dateRange as $date) {
$range[] = $date->format('Y-m-d');
}
var_dump($range);
查看它在中的工作“sub”方法修改源对象,并将对象本身作为返回值输出(实际上这是用于方法链接)。它不仅仅是用新的日期创建一个新对象
$begin = $today->sub(new DateInterval('P30D'));
修改$today
并输出一个副本,然后将其声明为$begin
。这会导致两个对象具有相同的日期,因此没有迭代的时间间隔
看
您需要为结束日期创建一个单独的对象:
$begin = new DateTime();
$begin->sub(new DateInterval('P30D'));
$end = new DateTime();
$interval = new DateInterval('P1D'); // 1 Day
$dateRange = new DatePeriod($begin, $interval, $end);
$range = [];
foreach ($dateRange as $date) {
$range[] = $date->format('Y-m-d');
}
var_dump($range);
查看它在处的工作情况,或者您可以
克隆
它。是的,我发现这不管用。。谢天谢地,我甚至不知道php中存在这样的克隆。或者,你可以clone
it。是的,我发现这不管用。。谢天谢地,我甚至不知道phpp中存在这样的克隆。请将这个好答案传输到这个加载了不太好答案的更早的副本。请将这个好答案转移到这个更早的副本中,该副本中包含了不太好的答案。相关的:相关的: