Php 不包括周末的小时数

Php 不包括周末的小时数,php,strtotime,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

除了周末,我怎么能得到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

欢迎使用堆栈溢出。由于PHP7在许多服务器上都可用,因此可以使用舒适的日期类。下面的示例正是您想要的。自PHP5(几年)以来,所使用的课程一直可用

首先,我们定义开始日期和结束日期。对于这个例子,我选择上周五来演示,周六和周日被忽略。不要让一周中的三天迷惑你。我们在开始日期的午夜开始,以获得包括整个开始日期在内的整整两个工作日。因为您需要每一小时,所以我们使用
DateInterval
类并定义一个小时间隔。使用start、end和interval,我们可以使用
DatePeriod
类遍历一个范围。在循环中,我们检查,如果工作日(假设6是星期六,7是星期天)是星期六和星期天,那么该日期将被修改,直到到达下一个星期一为止。输出是每小时跳过周末


请查看php以了解这些类可以为您做什么以及它们是如何工作的。不要照搬这个例子。

周末是指周六00:00到周日23:59吗?@Qirel是的,先生。不是$time=strottime($time.+1天)@SimoneRossaini我试过了,但它给了我1970-01-01 07:00:00将while改为just if并直接添加2天。我同意可以使用DateTime类。除此之外,你的答案完全无效,甚至没有达到OP的目标。是的,没错。正如主题发起者在后面的评论中解释的那样,他到底想要什么,而不仅仅是添加工作日,这个答案可能不是确切的解决方案。但也从未提供过精确的解决方案。这让他走上了正确的方向。添加小时数而忽略周末与下面所示的示例相差不远。那么为什么这是无效的呢?这是我唯一的问题。什么是记录发令手要求的结果的有效方法?因为循环跳过每周六和周日24次而不是一次。换句话说,您为foreach提供的表示星期六和星期日的DateTime对象至少是必需的24倍。然后询问财产“一周中的哪一天”,这在这24个实例中没有区别。
$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'));
}