我正在构建一个包含本周所有可用时间表的下拉列表。 我在这里得到的代码显示了今天的星期六。
<?php
$dow = 'saturday';
$step = 1;
$unit = 'W';
$start = new DateTime('N');
$end = clone $start;
$start->modify($dow);
$end->add(new DateInterval('P1M'));
$interval = new DateInterval("P{$step}{$unit}");
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
echo $date->format('D, d M Y'), PHP_EOL;
}
现在我想要实现的是:
March 5, 2018 (Monday) at 2:00pm
March 5, 2018 (Monday) at 7:00pm
March 7, 2018 (Wednesday) at 2:00pm
March 7, 2018 (Wednesday) at 7:00pm
March 10, 2018 (Saturday) at 2:00pm
March 10, 2018 (Saturday) at 7:00pm
March 12, 2018 (Monday) at 2:00pm
March 12, 2018 (Monday) at 7:00pm
March 14, 2018 (Wednesday) at 2:00pm
March 14, 2018 (Wednesday) at 7:00pm
March 17, 2018 (Saturday) at 2:00pm
March 17, 2018 (Saturday) at 7:00pm
时间非常不变,包含过滤器以在需要时删除特定日期会很不错。我该怎么做?感谢
答案 0 :(得分:2)
您可以尝试这样的事情:
<?php
date_default_timezone_set('UTC');
$days_to_display = ['Monday', 'Saturday'];
$times_to_display = [14, 19];
$dates_to_exclude = ['2018-03-19'];
$startTime = new DateTime();
$currentTime = clone $startTime;
$endTime = clone $startTime;
$endTime->add(new DateInterval('P1M')); // For the next month
while($currentTime <= $endTime) {
if (
in_array($currentTime->format('l'), $days_to_display) &&
!in_array($currentTime->format('Y-m-d'), $dates_to_exclude)
) {
foreach($times_to_display as $hour) {
$currentTime->setTime($hour, 0, 0);
echo $currentTime->format('F j, Y (l) \a\t g:ia') . "\n";
}
}
$currentTime->add(new DateInterval('P1D'));
}
这导致输出:
March 10, 2018 (Saturday) at 2:00pm
March 10, 2018 (Saturday) at 7:00pm
March 12, 2018 (Monday) at 2:00pm
March 12, 2018 (Monday) at 7:00pm
March 17, 2018 (Saturday) at 2:00pm
March 17, 2018 (Saturday) at 7:00pm
March 24, 2018 (Saturday) at 2:00pm
March 24, 2018 (Saturday) at 7:00pm
March 26, 2018 (Monday) at 2:00pm
March 26, 2018 (Monday) at 7:00pm
March 31, 2018 (Saturday) at 2:00pm
March 31, 2018 (Saturday) at 7:00pm
April 2, 2018 (Monday) at 2:00pm
April 2, 2018 (Monday) at 7:00pm
对我来说,关键是增加一个反击日期,直到找到你满意的一天。这不是特别有效(因为它每天都在循环),但应该足以满足您的需求。