如何在PHP中获取,增加和比较日期时间?

时间:2009-08-30 05:52:47

标签: php datetime

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

  1. 我如何获得当前的时间?
  2. 如何将x分钟添加到当前此日期时间?
  3. 我如何比较(< =)datetime?
  4. 我认为我们应该使用日期时间。是不是?

5 个答案:

答案 0 :(得分:4)

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(),但在这种情况下您不需要它。

答案 1 :(得分:1)

使用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!
    }
?>

答案 2 :(得分:0)

  1. 使用time()函数获取UNIX时间戳,这实际上只是一个大整数。
  2. time()返回的数字是自某个日期(如1970年1月1日)以来的秒数,因此要向其添加$x分钟,您需要执行(time() + ($x*60))之类的操作。< / LI>
  3. 由于UNIX时间戳只是数字,您可以将它们与数字的常用比较运算符进行比较(< <= > >= ==

答案 3 :(得分:0)

time()会给你自1970年1月1日以来的当前时间(整数),看起来应该是好的。

要添加x分钟,您只需要添加x * 60,就可以像其他两个整数一样进行比较。

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

答案 4 :(得分:0)

这是一个老问题,但我想提供一个基于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

我如何comapare(&lt; =)datetime?

使用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.