dd/mm/YYYY格式而循环问题增加1天



我正在PHP中创建一个while循环来迭代两个日期之间的所有天数。

$startdate = "17/12/2022"; // my dd/mm/YYYY format start date
$startdate = str_replace('/', '-',$startdate); // convert the slashes to dashes to signify european date format
$startdate = strtotime($startdate); // convert the date into a date object
$enddate = "16/12/2023"; // my dd/mm/YYYY format start date
$enddate = str_replace('/', '-',$enddate); // convert the slashes to dashes to signify european date format
$enddate = strtotime($enddate); // convert the date into a date object
echo(date('d/m/Y',$startdate)."<br/>");
echo(date('d/m/Y',$enddate)."<br/>");
while($startdate <= $enddate) {
$dayofweek = date('w',$startdate); // a task
echo($dayofweek)."<br/>");
//I need to increment the $startdate by one day here?
}
?>

我相信将斜杠改为破折号可以有效地指示PHP将日期识别为dd/mm/YYYY而不是mm/dd/YYYY。有参考(在许多例子中)PHP文档概述了这个功能,但PHP文档不再显示这个;它也没有表明它已经耗尽或已经改变。它只是被省略了。我的测试表明它可以工作,但我找不到替代的参考。

然后我使用strtotime将两个日期转换为一个日期对象,以便它们可以进行比较。

然后我需要在$startdate和循环中添加1天,但这是添加一天使我感到困惑。我能找到的所有例子都是使用今天的日期或没有格式化的字符串dd/mm/YYYY。

我坦率地承认,我可能整个前提都错了,但如果有任何好的实践建议,我将不胜感激。

使用DateTime类和DateInterval类和DatePeriod类,您可以为您完成相当多的繁重工作

$startdate = "17/12/2022"; // my dd/mm/YYYY format start date
$enddate = "31/12/2022"; // my dd/mm/YYYY format start date
$sDate = ( new Datetime() )->createFromFormat('d/m/Y', $startdate);
$eDate = ( new Datetime() )->createFromFormat('d/m/Y', $enddate);
$oneDay = new DateInterval('P1D');
$daterange = new DatePeriod($sDate, $oneDay ,$eDate);
foreach ( $daterange as $dat) {
echo $dat->format('d/m/y - w D') . PHP_EOL;
}

使用更小范围日期的结果

17/12/22 - 6 Sat
18/12/22 - 0 Sun
19/12/22 - 1 Mon
20/12/22 - 2 Tue
21/12/22 - 3 Wed
22/12/22 - 4 Thu
23/12/22 - 5 Fri
24/12/22 - 6 Sat
25/12/22 - 0 Sun
26/12/22 - 1 Mon
27/12/22 - 2 Tue
28/12/22 - 3 Wed
29/12/22 - 4 Thu
30/12/22 - 5 Fri

最新更新