【发布时间】:2009-08-30 05:52:47
【问题描述】:
我正在开发一个测验网站,并且有 x 分钟的时间来回答测验。因此,当用户单击开始测验链接时,会在会话中记录开始时间(此时的当前时间)。结束时间(开始时间+ 30 分钟)也记录在会话中,每次他提交答案时,都会将当前时间与测验结束时间进行比较。仅当当前时间小于 end_time 时,才应接受答案。
- 如何获取当前日期时间?
- 如何在当前日期时间中添加 x 分钟?
- 如何比较 (
我认为我们应该使用日期时间。对吗?
【问题讨论】:
我正在开发一个测验网站,并且有 x 分钟的时间来回答测验。因此,当用户单击开始测验链接时,会在会话中记录开始时间(此时的当前时间)。结束时间(开始时间+ 30 分钟)也记录在会话中,每次他提交答案时,都会将当前时间与测验结束时间进行比较。仅当当前时间小于 end_time 时,才应接受答案。
我认为我们应该使用日期时间。对吗?
【问题讨论】:
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(),但在这种情况下您不需要它。
【讨论】:
使用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!
}
?>
【讨论】:
time() 返回的数字是自某个日期(如 1970 年 1 月 1 日)以来的秒数,因此要向其添加 $x 分钟,您可以执行类似 (time() + ($x*60)) 的操作。< <= > >= ==)【讨论】:
time() 将为您提供自 1970 年 1 月 1 日以来的当前时间(以秒为单位)(一个整数),看起来应该不错。
要添加 x 分钟,您只需要将 x*60 添加到其中,您可以像比较任何其他两个整数一样比较它。
【讨论】:
这是一个老问题,但我想提供一个基于 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
您可以使用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.
【讨论】: