我如何获得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。
答案 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,以了解这些类可以为您做什么以及它们如何工作。不要只是复制此示例。