DatePeriod
是 PHP 中用于创建日期范围的类,它允许你轻松地遍历日期范围内的每一天。要处理节假日,你可以创建一个包含节假日的自定义日历,然后将其传递给 DatePeriod
类。以下是一个示例:
<?php
require 'vendor/autoload.php';
use DateTime;
use DateInterval;
use DatePeriod;
use DateTimeZone;
// 创建一个包含节假日的日历
$holidays = new DateTimeZone('America/New_York');
$holidays->add(new DateTime('2022-01-01')); // New Year's Day
$holidays->add(new DateTime('2022-07-04')); // Independence Day
$holidays->add(new DateTime('2022-12-25')); // Christmas Day
// 创建一个日期范围
$startDate = new DateTime('2022-01-01', $holidays);
$endDate = new DateTime('2022-12-31', $holidays);
$interval = new DateInterval('P1D'); // 每天
// 创建一个 DatePeriod 实例,跳过节假日
$period = new DatePeriod($startDate, $interval, $endDate->add($interval)->modify('-1 day'), DatePeriod::EXCLUDE_START_DATE);
// 遍历日期范围内的每一天,跳过节假日
foreach ($period as $date) {
if ($date->format('Y-m-d') == '2022-01-01' || $date->format('Y-m-d') == '2022-07-04' || $date->format('Y-m-d') == '2022-12-25') {
continue;
}
echo $date->format('Y-m-d') . PHP_EOL;
}
在这个示例中,我们首先创建了一个包含节假日的日历,并将其设置为纽约时区。然后,我们创建了一个日期范围,从 2022-01-01
到 2022-12-31
,并使用 DateInterval
设置为每天。接下来,我们创建了一个 DatePeriod
实例,跳过节假日,并将开始日期设置为 $startDate
,结束日期设置为 $endDate
的下一天,然后减去一天。最后,我们遍历日期范围内的每一天,跳过节假日,并输出日期。