【问题标题】:How do I find the hour difference between two dates in PHP?如何在 PHP 中找到两个日期之间的小时差?
【发布时间】:2011-04-15 09:02:15
【问题描述】:

我有两个日期,格式类似于“Y-m-d H:i:s”。我需要比较这两个日期并找出小时差。

【问题讨论】:

  • 你有没有尝试过?例如,您可以使用 strtotime 将它们都转换为 unix 时间戳(秒),然后减去它,然后除以 3600 得到小时
  • 是的,我除以 24 而不是 3600。doh!

标签: php datetime date


【解决方案1】:

您可以将它们转换为时间戳并从那里开始:

$hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1);

除以 3600,因为一小时有 3600 秒,并使用 round() 避免出现很多小数位。

【讨论】:

  • 谢谢,这就是我正在尝试的,但我试图除以 24。
  • 使用strtotime()不是最好的方式管理日期。考虑使用\DateTime::createFromFormat($date, 'Y-m-d H:i:s')->diff($dto2) 或类似功能来处理日期(+ 我们知道我们希望解析的格式)。外面快 2015 年了,让我们以优雅的方式做事吧!
  • 除了 createFromFormat 将 $format 作为第一个参数 ;) \DateTime::createFromFormat('Y-m-d H:i:s', $date)->diff( $dto2 )
【解决方案2】:

你也可以使用DateTime 类-

$d1= new DateTime("06-08-2015 01:33:26pm"); // first date
$d2= new DateTime("06-07-2015 10:33:26am"); // second date
$interval= $d1->diff($d2); // get difference between two dates
echo ($interval->days * 24) + $interval->h; // convert days to hours and add hours from difference

【讨论】:

    【解决方案3】:
    $seconds = strtotime($date2) - strtotime($date1);
    $hours = $seconds / 60 / 60;
    

    【讨论】:

      【解决方案4】:

      作为已接受答案的补充,我想提醒您\DateTime::diff 可用!

      $f = 'Y-m-d H:i:s';
      $d1 = \DateTime::createFromFormat($date1, $f);
      $d2 = \DateTime::createFromFormat($date2, $f);
      
      /**
       * @var \DateInterval $diff
       */
      $diff = $d2->diff($d1);
      $hours = $diff->h + ($diff->days * 24); // + ($diff->m > 30 ? 1 : 0) to be more precise
      

      \DateInterval 文档。

      【讨论】:

        【解决方案5】:
        $date1 = date_create('2016-12-12 09:00:00');
        
        $date2 = date_create('2016-12-12 11:00:00');
        
        $diff = date_diff($date1,$date2);
        
        $hour = $diff->h;
        

        【讨论】:

        • 这不准确,好像有超过 24 小时的差异,这很容易返回 0(即 $diff->d = 1 和 $diff->h = 0 )
        【解决方案6】:

        问题是使用这些值的结果是 167,它应该是 168:

        $date1 = "2014-03-07 05:49:23";
        $date2 = "2014-03-14 05:49:23";
        $seconds = strtotime($date2) - strtotime($date1);
        $hours = $seconds / 60 /  60;
        

        【讨论】:

          【解决方案7】:

          你可以试试这个:

              $time1 = new DateTime('06:56:58');
              $time2 = new DateTime('15:35:00');
              $time_diff = $time1->diff($time2);
              echo $time_diff->h.' hours';
              echo $time_diff->i.' minutes';
              echo $time_diff->s.' seconds';
          

          输出:

          8 小时 38 分 2 秒

          【讨论】:

            【解决方案8】:

            您可以使用strtotime() 来解析您的字符串并在两者之间进行区分。


            资源:

            【讨论】:

              【解决方案9】:

              这是因为节省了一天的时间。 2014 年夏令时(美国)于凌晨 2:00 开始 3 月 9 日,星期日。

              在从 $date1 = "2014-03-07 05:49:23" 到 $date2 = "2014-03-14 05:49:23";

              【讨论】:

                【解决方案10】:

                你可以试试这个:

                $dayinpass = "2016-09-23 20:09:12";
                $today = time();
                $dayinpass= strtotime($dayinpass);
                echo round(abs($today-$dayinpass)/60/60);
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-10-10
                  • 1970-01-01
                  • 2021-12-19
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多