【问题标题】:Convert dates to hours将日期转换为小时
【发布时间】:2009-11-22 14:50:34
【问题描述】:

我第一次尝试使用日期,我用 Flash 做了一些事情,但它有所不同。

我有两个不同的日期,我想看看他们在小时和天上的差异,我找到了太多例子,但不是我想要的:

<?php
    $now_date = strtotime (date ('Y-m-d H:i:s')); // the current date 
    $key_date = strtotime (date ("2009-11-21 14:08:42"));
    print date ($now_date - $key_date);
    // it returns an integer like 5813, 5814, 5815, etc... (I presume they are seconds) 
?>

如何将其转换为小时或天?

【问题讨论】:

    标签: php date hour days


    【解决方案1】:

    DateTime diff 函数返回一个DateInterval 对象。该对象由与差异相关的变量组成。您可以像上面的示例一样查询天、小时、分钟、秒。

    例子:

    <?php 
     $dateObject = new DateTime(); // No arguments means 'now'
     $otherDateObject = new DateTime('2008-08-14 03:14:15');
     $diffObject = $dateObject->diff($otherDateObject)); 
     echo "Days of difference: ". $diffObject->days; 
    ?>
    

    请参阅有关DateTime 的手册。

    很遗憾,这是 PHP 5.3> 独有的功能。

    【讨论】:

    • 好建议,可惜我有5.22版本,但下次有空我会用。
    • 好答案,一件小事,在你的例子中,你在第 4 行有一个额外的大括号。所以... $diffObject = $dateObject-&gt;diff($otherDateObject)); 应该是... $diffObject = $dateObject-&gt;diff($otherDateObject);
    【解决方案2】:

    好吧,你总是可以使用 date_diff,但这仅适用于 PHP 5.3.0+

    另一种选择是数学。

    如何将 [秒] 转换为小时或天?

    每分钟有 60 秒,也就是说每小时有 3600 秒。

    $hours = $seconds/3600;
    

    当然,如果您需要几天...

    $days = $hours/24;
    

    【讨论】:

      【解决方案3】:

      如果你没有 PHP5.3,你可以从用户区使用这个方法 (taken from WebDeveloper.com)

      function date_time_diff($start, $end, $date_only = true)  // $start and $end as timestamps
      {
          if ($start < $end) {
              list($end, $start) = array($start, $end);
          }
          $result = array('years' => 0, 'months' => 0, 'days' => 0);
          if (!$date_only) {
              $result = array_merge($result, array('hours' => 0, 'minutes' => 0, 'seconds' => 0));
          }
          foreach ($result as $period => $value) {
              while (($start = strtotime('-1 ' . $period, $start)) >= $end) {
                  $result[$period]++;
              }
              $start = strtotime('+1 ' . $period, $start);
          }
          return $result;
      }
      
      $date_1 = strtotime('2005-07-31');
      $date_2 = time();
      $diff = date_time_diff($date_1, $date_2);
      foreach ($diff as $key => $val) {
          echo $val . ' ' . $key . ' ';
      }
      
      // Displays:
      // 3 years 4 months 11 days 
      

      【讨论】:

        【解决方案4】:

        TheGrandWazoo 提到了 php 5.3 的方法>。对于较低版本,您可以将两个日期之间的秒数除以一天中的秒数来计算天数。

        几天来,你这样做:

        $days = floor(($now_date - $key_date) / (60 * 60 * 24))
        

        如果想知道还剩多少小时,可以使用取模运算符(%)

        $hours = floor((($now_date - $key_date) % * (60 * 60 * 24)) / 60 * 60)
        

        【讨论】:

          【解决方案5】:
          <?php
              $now_date = strtotime (date ('Y-m-d H:i:s')); // the current date 
              $key_date = strtotime (date ("2009-11-21 14:08:42"));
              $diff = $now_date - $key_date;
              $days    = floor($diff/(60*60*24));
              $hours   = floor(($diff-($days*60*60*24))/(60*60));
              print $days." ".$hours." difference";
          ?>
          

          【讨论】:

            【解决方案6】:

            我更喜欢使用 epoch/unix 时间增量。时间以秒表示,因此您可以非常快速地除以 3600 小时数和除以 24*3600=86400 天数。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-10-01
              • 2018-10-15
              • 1970-01-01
              • 2019-11-26
              • 2020-03-25
              • 2023-03-24
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多