我正在开发一个测验网站,有时间让x分钟回答测验。因此,当用户点击开始测验链接时,会话中会记录开始时间(此时的当前时间)。此外,会话中记录了结束时间(start_time + 30分钟),每次提交答案时,都会将当前时间与测验结束时间进行比较。只有当前时间小于end_time时才应接受答案。
我认为我们应该使用日期时间。是不是?
答案 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)
time()
返回的数字是自某个日期(如1970年1月1日)以来的秒数,因此要向其添加$x
分钟,您需要执行(time() + ($x*60))
之类的操作。< / LI>
< <= > >= ==
)答案 3 :(得分:0)
time()会给你自1970年1月1日以来的当前时间(整数),看起来应该是好的。
要添加x分钟,您只需要添加x * 60,就可以像其他两个整数一样进行比较。
答案 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
您可以使用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.