不包括周末的小时数

时间:2020-02-03 07:07:18

标签: php strtotime

我如何获得48小时(不包括周末)?例如今天是2020-01-31 23:00:00,我添加48小时应该是2020-02-04 23:00:00,但是当我尝试此代码时:

$time = strtotime('+48 hour');

while (date('w', $time) % 6 == 0) {
    $time = strtotime('+1 day', $time);
}

$date = date('Y-m-d H:i:s', $time);

它给了我2020-02-03 23:00:00。

1 个答案:

答案 0 :(得分:0)

欢迎堆栈溢出。由于PHP7可在许多服务器上使用,因此可以使用舒适的日期类。以下示例完全满足您的要求。从PHP5开始使用的类已经存在了很多年。

$start = new DateTime('2020-01-31T23:00:00');
$end = (new DateTime('2020-01-31T23:00:00'))->modify('midnight +3 weekdays');
$interval = new DateInterval('PT1H');

$range = new DatePeriod($start, $interval, $end);
foreach ($range as $date) {
    if ($date->format('N') == 6 || $date->format('N') == 7) {
        continue;
    }
    var_dump($date->format('Y-m-d H:i:s'));
}

首先,我们定义开始日期和结束日期。在本例中,我选择了上一个星期五来演示,星期六和星期天将被忽略。不要让一周的三天让您感到困惑。我们从开始日期的午夜开始,以获取完整的两个工作日,包括整个开始日期。由于您每个小时都想使用一次,因此我们使用DateInterval类并定义一个小时间隔。通过开始,结束和间隔,我们可以使用DatePeriod类遍历一个范围。在循环中,我们检查如果工作日(假设6是星期六,而7是星期日)是星期六和星期日,则日期将被修改直到下一个星期一。输出是每小时跳过周末。

请查看php documentation for date and time,以了解这些类可以为您做什么以及它们如何工作。不要只是复制此示例。