计算两个日期之间的小时数 - 不包括周末

3
使用以下代码:在PHP中计算两个日期之间的小时数,我想要计算两个时间戳之间的小时数。
现在我需要能够从这个计数中排除周末小时数?
例如,对于以下2个时间戳,我期望小时数为24而不是72。
$datetime1 = "2012-07-20 12:00:00";
$datetime2 = "2012-07-23 12:00:00";
1个回答

6
以下代码应该可以工作。我假设 $datetime1 始终小于 $datetime2。
$datetime1 = "2012-07-20 12:00:00"; 
$datetime2 = "2012-07-23 12:00:00";

$timestamp1 = strtotime($datetime1);
$timestamp2 = strtotime($datetime2);

$weekend = array(0, 6);

if(in_array(date("w", $timestamp1), $weekend) || in_array(date("w", $timestamp2), $weekend))
{
    //one of the dates is weekend, return 0?
    return 0;
}

$diff = $timestamp2 - $timestamp1;
$one_day = 60 * 60 * 24; //number of seconds in the day

if($diff < $one_day)
{
    return floor($diff / 3600);
}

$days_between = floor($diff / $one_day);
$remove_days  = 0;

for($i = 1; $i <= $days_between; $i++)
{
   $next_day = $timestamp1 + ($i * $one_day);
   if(in_array(date("w", $next_day), $weekend))
   {
      $remove_days++; 
   }
}

return floor(($diff - ($remove_days * $one_day)) / 3600);

这似乎行不通。当我使用我的示例时,返回0。如果我将date1更改为19/7/12,则结束值变为960。 - CelebornThingol
嘿,抱歉代码中有一个小错误。现在应该可以正常工作了。 - Kasia Gogolek
@KasiaGogolek 我知道这已经过时了,但你能否更新代码以支持日期1或日期2是周末日期?因为如果我的日期1是星期日,那么日期2是星期三。它不能得到正确的小时数。 - John Christian De Chavez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接