【问题标题】:How to obtain, increment, and compare datetime in PHP?如何在 PHP 中获取、增加和比较日期时间?
【发布时间】:2009-08-30 05:52:47
【问题描述】:

我正在开发一个测验网站,并且有 x 分钟的时间来回答测验。因此,当用户单击开始测验链接时,会在会话中记录开始时间(此时的当前时间)。结束时间(开始时间+ 30 分钟)也记录在会话中,每次他提交答案时,都会将当前时间与测验结束时间进行比较。仅当当前时间小于 end_time 时,才应接受答案。

  1. 如何获取当前日期时间?
  2. 如何在当前日期时间中添加 x 分钟?
  3. 如何比较 (

我认为我们应该使用日期时间。对吗?

【问题讨论】:

    标签: php datetime


    【解决方案1】:

    PHP 将时间测量为自 Unix 纪元(1970 年 1 月 1 日)以来的秒数。这使它非常易于使用,因为所有内容都只是一个数字。

    要获取当前时间,请使用:time()

    对于像加 30 分钟这样的基本数学运算,只需将间隔转换为秒并添加:

    time() + 30 * 60  // (30 * 60 ==> 30 minutes)
    

    因为它们只是数字,所以只需进行常规的旧整数比较:

    $oldTime = $_SESSION['startTime'];
    $now = time();
    
    if ($now < $oldTime + 30 * 60) {
        //expired
    }
    

    如果您需要执行更复杂的操作,例如查找“下周二”的日期或其他内容,请查看 strtotime(),但在这种情况下您不需要它。

    【讨论】:

      【解决方案2】:

      使用php内置函数获取时间:

       <?php
           $currentTimeStamp = time(); // number of seconds since 1970, returns Integer value
           $dateStringForASpecificSecond = date('Y-m-d H:i:s', $currentTimeStamp);
       ?>
      

      对于需要比较这些时间的应用程序,使用时间戳更合适。

      <?php
           $start = time();
           $end = $start + (30 * 60); // 30 minutes
           $_SESSION['end_time'] = $end;
      ?>
      

      在提交测验的页面中:

      <?php
          $now = time();
          if ( $now <= $_SESSION['end_time'] ) {
               // ok!
          }
      ?>
      

      【讨论】:

        【解决方案3】:
        1. 使用time() 函数获取UNIX 时间戳,它实际上只是一个大整数。
        2. time() 返回的数字是自某个日期(如 1970 年 1 月 1 日)以来的秒数,因此要向其添加 $x 分钟,您可以执行类似 (time() + ($x*60)) 的操作。
        3. 由于 UNIX 时间戳只是数字,您可以将它们与通常的数字比较运算符进行比较 (&lt; &lt;= &gt; &gt;= ==)

        【讨论】:

          【解决方案4】:

          time() 将为您提供自 1970 年 1 月 1 日以来的当前时间(以秒为单位)(一个整数),看起来应该不错。

          要添加 x 分钟,您只需要将 x*60 添加到其中,您可以像比较任何其他两个整数一样比较它。

          来源:http://us3.php.net/time

          【讨论】:

            【解决方案5】:

            这是一个老问题,但我想提供一个基于 PHP 5.2 DateTime 类的答案,我觉得它比以前的任何函数都更容易使用和更通用。

            那么我怎样才能得到当前日期时间呢?

            你可以像这样创建一个新的 DateTime 对象:

            $currentTime = new DateTime();
            

            但此时,$currentTime 是一个日期时间对象,必须将其转换为字符串才能将其存储在数据库中或输出。

            $currentTime = $currentTime->format('Y-m-d H:i:s');
            
            echo $currentTime;
            

            输出2014-05-10 21:14:06

            如何在这个日期时间中添加 x 分钟?

            您可以使用modify 方法添加 x 分钟:

            $currentTime = new DateTime();
            $addedMinutes = $currentTime->modify('+10 minutes');
            
            echo $addedMinutes;
            

            输出2014-05-10 21:24:06

            如何比较 (

            使用DateTime 类,您不仅可以轻松比较日期时间对象,还可以了解它们之间的差异。

            $currentTime = new DateTime('2014-05-10 21:14:06');
            $addDays = $currentTime->modify('+10 days');
            

            比较

            if ($currentTime >= $addDays) {
                //do something//
            }
            
            $diffTime = new DateTime('2014-05-10 21:14:06');
            $diff = $addDays->diff($diffTime);
            $diff = $diff->format('There are %d days difference.');
            
            echo $diff;
            

            输出There are 10 days difference.

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-11-04
              • 1970-01-01
              • 1970-01-01
              • 2012-10-05
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多