从今天起多天输出

时间:2018-03-06 01:43:34

标签: php

我正在构建一个包含本周所有可用时间表的下拉列表。 我在这里得到的代码显示了今天的星期六。

<?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

时间非常不变,包含过滤器以在需要时删除特定日期会很不错。我该怎么做?感谢

1 个答案:

答案 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

对我来说,关键是增加一个反击日期,直到找到你满意的一天。这不是特别有效(因为它每天都在循环),但应该足以满足您的需求。