我如何 运行 带有 for 或 foreach 循环的 DateTime 循环遍历每一天并向每一天添加 +3 天?
How can I run a DateTime with for or foreach loop to loop through each day and add +3 days to each?
我在 PHP 中有 2 个日期,我如何 运行 一个 for 或 foreach 循环遍历每一天并为每个日期加上 +3 天?
下面我添加了一个示例,说明我希望如何获取列表。
<?php
$begin = new DateTime( "2022-01-01" );
$end = new DateTime( "2022-01-31" );
for($i=$begin; $i<=$end; $i->modify('+1 day')){
for($j=$begin; $j<=$end; $j->modify('+3 day')){
echo $i->format("M d, Y").' => ';
echo $j->format("M d, Y").'<br/><br/>';
/* I WANTS TO GET
* Jan 01, 2022 => Jan 04, 2022
* Jan 02, 2022 => Jan 05, 2022
* Jan 03, 2022 => Jan 06, 2022
*...
*...
* Jan 31, 2022 => Feb 03, 2022
*/
}
}
?>
如果结束日期总是从开始算起三天,那么你只需要一个循环,在开始日期之上。然后,不是第二个循环来设置结束日期,而是在每次迭代中相对于开始设置它:
for ($start = $begin; $start <= $end; $start->modify('+1 day')) {
$stop = clone $start;
$stop->modify('+3 days');
printf("%s => %s\n", $start->format("M d, Y"), $stop->format("M d, Y"));
}
请注意,您需要通过克隆创建一个新的日期对象,以便您对 +3 days
的第二次修改不会更改开始日期。
使用 DateInterval()
和 DatePeriod()
是设置参数的简单案例,运行 循环
$begin = new DateTime( "2022-01-01" );
$end = new DateTime( "2022-01-31" );
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
foreach($daterange as $dateFrom){
$to = clone $dateFrom;
echo sprintf("%s => %s\n",
$dateFrom->format("M d, Y"),
$to->modify('3 day')->format("M d, Y")
);
}
结果
Jan 01, 2022 => Jan 04, 2022
Jan 02, 2022 => Jan 05, 2022
Jan 03, 2022 => Jan 06, 2022
Jan 04, 2022 => Jan 07, 2022
Jan 05, 2022 => Jan 08, 2022
Jan 06, 2022 => Jan 09, 2022
Jan 07, 2022 => Jan 10, 2022
Jan 08, 2022 => Jan 11, 2022
Jan 09, 2022 => Jan 12, 2022
Jan 10, 2022 => Jan 13, 2022
Jan 11, 2022 => Jan 14, 2022
Jan 12, 2022 => Jan 15, 2022
Jan 13, 2022 => Jan 16, 2022
Jan 14, 2022 => Jan 17, 2022
Jan 15, 2022 => Jan 18, 2022
Jan 16, 2022 => Jan 19, 2022
Jan 17, 2022 => Jan 20, 2022
Jan 18, 2022 => Jan 21, 2022
Jan 19, 2022 => Jan 22, 2022
Jan 20, 2022 => Jan 23, 2022
Jan 21, 2022 => Jan 24, 2022
Jan 22, 2022 => Jan 25, 2022
Jan 23, 2022 => Jan 26, 2022
Jan 24, 2022 => Jan 27, 2022
Jan 25, 2022 => Jan 28, 2022
Jan 26, 2022 => Jan 29, 2022
Jan 27, 2022 => Jan 30, 2022
Jan 28, 2022 => Jan 31, 2022
Jan 29, 2022 => Feb 01, 2022
Jan 30, 2022 => Feb 02, 2022
如果愿意,您也可以只对所有这些使用同一个 DateTime 对象。
for ($i = $begin; $i <= $end; $i->modify('-2 day')) {
echo $i->format("M d, Y") . ' => ';
echo $i->modify('+3 day')->format("M d, Y") . '<br><br>';
}
我在 PHP 中有 2 个日期,我如何 运行 一个 for 或 foreach 循环遍历每一天并为每个日期加上 +3 天?
下面我添加了一个示例,说明我希望如何获取列表。
<?php
$begin = new DateTime( "2022-01-01" );
$end = new DateTime( "2022-01-31" );
for($i=$begin; $i<=$end; $i->modify('+1 day')){
for($j=$begin; $j<=$end; $j->modify('+3 day')){
echo $i->format("M d, Y").' => ';
echo $j->format("M d, Y").'<br/><br/>';
/* I WANTS TO GET
* Jan 01, 2022 => Jan 04, 2022
* Jan 02, 2022 => Jan 05, 2022
* Jan 03, 2022 => Jan 06, 2022
*...
*...
* Jan 31, 2022 => Feb 03, 2022
*/
}
}
?>
如果结束日期总是从开始算起三天,那么你只需要一个循环,在开始日期之上。然后,不是第二个循环来设置结束日期,而是在每次迭代中相对于开始设置它:
for ($start = $begin; $start <= $end; $start->modify('+1 day')) {
$stop = clone $start;
$stop->modify('+3 days');
printf("%s => %s\n", $start->format("M d, Y"), $stop->format("M d, Y"));
}
请注意,您需要通过克隆创建一个新的日期对象,以便您对 +3 days
的第二次修改不会更改开始日期。
使用 DateInterval()
和 DatePeriod()
是设置参数的简单案例,运行 循环
$begin = new DateTime( "2022-01-01" );
$end = new DateTime( "2022-01-31" );
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
foreach($daterange as $dateFrom){
$to = clone $dateFrom;
echo sprintf("%s => %s\n",
$dateFrom->format("M d, Y"),
$to->modify('3 day')->format("M d, Y")
);
}
结果
Jan 01, 2022 => Jan 04, 2022
Jan 02, 2022 => Jan 05, 2022
Jan 03, 2022 => Jan 06, 2022
Jan 04, 2022 => Jan 07, 2022
Jan 05, 2022 => Jan 08, 2022
Jan 06, 2022 => Jan 09, 2022
Jan 07, 2022 => Jan 10, 2022
Jan 08, 2022 => Jan 11, 2022
Jan 09, 2022 => Jan 12, 2022
Jan 10, 2022 => Jan 13, 2022
Jan 11, 2022 => Jan 14, 2022
Jan 12, 2022 => Jan 15, 2022
Jan 13, 2022 => Jan 16, 2022
Jan 14, 2022 => Jan 17, 2022
Jan 15, 2022 => Jan 18, 2022
Jan 16, 2022 => Jan 19, 2022
Jan 17, 2022 => Jan 20, 2022
Jan 18, 2022 => Jan 21, 2022
Jan 19, 2022 => Jan 22, 2022
Jan 20, 2022 => Jan 23, 2022
Jan 21, 2022 => Jan 24, 2022
Jan 22, 2022 => Jan 25, 2022
Jan 23, 2022 => Jan 26, 2022
Jan 24, 2022 => Jan 27, 2022
Jan 25, 2022 => Jan 28, 2022
Jan 26, 2022 => Jan 29, 2022
Jan 27, 2022 => Jan 30, 2022
Jan 28, 2022 => Jan 31, 2022
Jan 29, 2022 => Feb 01, 2022
Jan 30, 2022 => Feb 02, 2022
如果愿意,您也可以只对所有这些使用同一个 DateTime 对象。
for ($i = $begin; $i <= $end; $i->modify('-2 day')) {
echo $i->format("M d, Y") . ' => ';
echo $i->modify('+3 day')->format("M d, Y") . '<br><br>';
}