【问题标题】:How to get difference of a time in seconds in PHP?如何在 PHP 中获得以秒为单位的时间差?
【发布时间】:2013-11-30 10:46:57
【问题描述】:

我有一个数据类型为“时间”的数据库列,它存储 11:30:45。我已经在变量say中获取了这个时间

$databasetime = 11:30:45

我想声明一个变量$currenttime,它将包含刚才的时间。就像现在的 11:33:30 和另一个变量,它将包含它们在秒内的差异,例如

$timediff = $currenttime - $databasetime;
echo $timediff;

我正在尝试$currenttime = time();,但我没有得到我想要的结果。我想要$timediff = 165,但是当我回显时间()时,我得到了一个非常大的价值。

【问题讨论】:

    标签: php time


    【解决方案1】:
    $databasetime = strtotime('11:30:45');
    $curtime      = time();
    echo $curtime - $databasetime;
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式进行:

      $databasetime = '11:30:45';
      $time1 = strtotime($databasetime);
      $time2 = strtotime('now');
      $diff = $time2 - $time1;
      echo 'your difference: '.date('H:i:s', $diff);
      

      【讨论】:

      • 不工作。我系统上的当前时间是 21:25。当我设置 $databasetime = '21:24:00' 时,我得到了 18:32:35 的差异。不知道是怎么计算的?
      • 如果你回显 $time1 和 $time2,你会看到什么?
      【解决方案3】:
      $datetime1 = new DateTime('10:35:56 2013-11-17');
      $datetime2 = new DateTime('10:35:50 2013-11-17');
      $interval = $datetime1->diff($datetime2);
      
      echo $interval->m . " Month " .$interval->d ." Days ". $interval->h . " Hours, " . $interval->i." Mintues, ".$interval->s." seconds <br/>"; 
      

      【讨论】:

        【解决方案4】:
        <?php
        $currentTime = time();
        $futureDateTime = new DateTime('11:30:45'); // might want to specify a date and timezone, system TZ by default
        $futureTime = $futureDateTime->format('U'); // get unix timestamp
        $timeDiff = $futureTime-$currentTime;
        ?>
        

        【讨论】:

          【解决方案5】:

          您使用 DateTime 'OO' 方法直接返回 'unix timestamp' 整数

          <?php
          $now = new DateTime('now');
          $date = new DateTime('11:30:45');
          echo $now->getTimestamp() - $date->getTimestamp();
          ?>
          

          【讨论】:

          • 它不工作。以千为单位给出 -ve 值,-19541 这是错误的。
          • 这可能是服务器上的时区与您在数据库中存储的时区。尝试添加 date_default_timezone_set('America/Los_Angeles');或您使用的任何有效时区。
          【解决方案6】:

          这是一个简单的例子。

          $databasetime = '11:30:45';
          $timedif = abs(strtotime('now') - strtotime($databasetime));
          echo $timedif; //echos the difference in seconds.
          

          abs 仅用于防止负数,您可能想也可能不想这样做。

          【讨论】:

          • @hocat - 我现在没有得到 -ve 值,但差异太大。我只是尝试不这样做,并获得 19755 秒的时差。但实际差异在 2-3 分钟左右。
          • @hocat - PHP 是从机器时间还是从其他地方选择 now(),因为我给 $databasetime 的时间比现在低 2-3 分钟。
          • @nkp 不幸的是,问题通常是时区设置,如果延迟一个小时或更长时间,可能会推迟。你运行的是什么版本的php? php 5.3.2-1 有 bug 做类似的事情。如果您需要一个临时工作的坏主意,以便继续开发,您可以执行strtotime('now -5hours') 之类的操作。
          • 不,我需要永久解决方案。我正在使用 echo abs(strtotime('now') - strtotime('21:16:00'))。" ";我机器上的当前时间是 21:17,我得到的差异是 19615 而不是 60 左右。
          • @nkp 必须是时区问题。您可以运行 `echo date_default_timezone_get()' 来查看您的时区设置。
          【解决方案7】:

          我的问题现在解决了。实际上所有答案都是正确的,但问题是由于默认时区。我想要亚洲/加尔各答时区,但默认的欧洲时区 apache 正在挑选。这就是为什么我没有得到我想要的结果。

          所以,我终于使用了下面的代码:

          date_default_timezone_set('Asia/Kolkata');
          $databasetime = strtotime('11:30:45');
          $curtime      = time();
          echo $curtime - $databasetime;
          

          【讨论】:

            猜你喜欢
            • 2021-02-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-09
            • 1970-01-01
            • 1970-01-01
            • 2019-08-29
            • 1970-01-01
            相关资源
            最近更新 更多