Php 获取两个日期的差值,并计算此间隔之间的小时数

Php 获取两个日期的差值,并计算此间隔之间的小时数,php,datetime,Php,Datetime,在php中,我必须计算两个日期时间之间的小时数。这两个日期时间分别为分钟和秒,但它们可以忽略。目标是得到小时数的总和。此总和表示出现问题的间隙 你可以在这篇文章中找到一些代码。我必须知道以下几点: 我的操作是否正确?或者使用函数时是否有问题 像date->diff(像某些月份有30天,而其他月份有31天,或者闰年有问题?) 有没有更简单的方法来计算 日期->差异 为了实现这一目标,我通过以下方式实现: //delete minutes and seconds from datetime ob

在php中,我必须计算两个日期时间之间的小时数。这两个日期时间分别为分钟和秒,但它们可以忽略。目标是得到小时数的总和。此总和表示出现问题的间隙

你可以在这篇文章中找到一些代码。我必须知道以下几点:

  • 我的操作是否正确?或者使用函数时是否有问题 像date->diff(像某些月份有30天,而其他月份有31天,或者闰年有问题?)
  • 有没有更简单的方法来计算 日期->差异
  • 为了实现这一目标,我通过以下方式实现:

      //delete minutes and seconds from datetime object
      $datetime_start = date("Y-m-d h", strtotime($datetime_start));
      $datetime_end = date("Y-m-d h", strtotime($datetime_end));
      $datetime_start = $datetime_start.":00:00";
      $datetime_end = $datetime_end.":00:00";
    
      //create DateTime object
      $datetime_start = new DateTime($datetime_start);
      $datetime_end = new DateTime($datetime_end);
    
      //get interval between two dates and fill array      
      $interval = $datetime_end->diff($datetime_start);
      $details = array_intersect_key((array)$interval,array_flip(['y','m','d','h','i','s']));
    
      $sum_of_hours = 0;
    
      if(!empty($details["y"])){
        $sum_of_hours = $sum_of_hours + $details["y"] * 365 * 24;
      };
    
      if(!empty($details["m"])){
        $sum_of_hours = $sum_of_hours + $details["m"] * 30 * 24;
      };
    
      if(!empty($details["d"])){
        $sum_of_hours = $sum_of_hours + $details["d"] * 24;
      };
    
      if(!empty($details["h"])){
        $sum_of_hours = $sum_of_hours + $details["h"];
      };
    
    示例: 在这些日期“2018-06-30 02:00:05”和“2018-07-01 05:00:10”之间,我有一个间隔1天3小时,结果是27小时


    thx帮助

    您可以将它们转换为unix时间戳,然后相互减去以获得秒差,然后除以
    60*60
    以获得小时数:

    floor(abs($datetime_end->getTimestamp() - $datetime_start->getTimestamp()) / (60 * 60))
    
    这将为您的场景返回
    27


    旁注:为什么要创建$datetime\u start这样复杂的4个步骤?通过将更容易,因为我必须从开始和结束日期删除(修改)分和秒…仍然可以在一行中完成:
    $start=DateTime::createFromFormat(“Y-m-d H:i:s”,“2018-06-30 02:52:05”)->setTime(2,0,0)->setTime(2,0,0)覆盖我的小时数。我只想用00覆盖分和秒。有办法吗?你可以把时间定下来。不幸的是,没有办法(我能找到)只设置分和秒。
    
    <?php
    $datetime1 = date_create('2018-06-30 02:00:05');
    $datetime2 = date_create('2018-07-01 05:00:10');
    $interval = date_diff($datetime1, $datetime2);
    
    $hours = ($interval->days * 24) + $interval->h; // days to hour diff
    
    echo $hours;