2015-06-14 157 views
0

第一关 - 我通过PHP计算差异

我试图创建一种点击一个按钮来设置“计时器”使用使用MySQLMySQLi Procedural方法。据我所知,做到这一点的最佳方式(在动态计时器上 - IE:点击5分钟)是计算time()距离“现在”5分钟的时间。

如果用户断开页面并重新连接(用户名/密码登录),我想将其保存到数据库。这样,当他们重新登录时,它会保留剩余的时间。

现在的代码:

我用这从SQL(YYYY-MM-DD HH-MM-SS)拉我的DT变量:

$expirationTime = new DateTime(); 

if ($result->num_rows > 0) { 
    while($row = $result->fetch_assoc()) { 
     $expirationTime = $row['workTimer']; 
    } 
} 

$time = strtotime($expirationTime); 
$expirationTime = date("Y-m-d H:i:s", $time); 

然后我拉current time

$currentTime = date('Y-m-d H:i:s'); 

我对这两个都做了echo s,它们显示正确。我现在想做的是找出差异。我已经尝试了多种方式来做到这一点,但似乎没有任何工作。最近我做:

$countdown = $currentTime->diff($expirationTime); 
$countdown = $countdown->format("Y-m-d H:i:s", $countdown); 

Fatal error: Call to a member function diff() on a non-object in...

错误可能是什么问题?

谢谢!


我已经更新了一些每个评论的建议代码来:

$currentTimeT = date('Y-m-d H:i:s'); 
$currentTime = strtotime($currentTimeT); 

$time = date("Y-m-d H:i:s", $expirationTime); 
$expirationTime = strtotime($expirationTime); 

$countdown = $currentTime->diff($expirationTime); 
$countdown = $countdown->format("Y-m-d H:i:s", $countdown); 
echo "C ".$currentTime."<br/> E ".$expirationTime."<br/>D ".$countdown; 

同样的错误。

+0

'$ currentTime'是一个字符串,而不是'DateTime'。 – Barmar

+0

看看date_create() – BigScar

+0

在比较它们之前,不要将时间转换为字符串。更新了 – Barmar

回答

0

date_diff - 返回对象在两个日期时间之间的区别

和你逝去的非对象以功能差异()

看到这个PHP manual

我解决了就在我身边给你的问题它是一个尝试:

$time = "2016-09-1 04:45:54"; 
$time = strtotime($time); 
$currentTime = new DateTime(date('Y-m-d H:i:s')); 
$expirationTime = new DateTime(date("Y-m-d H:i:s",$time)); 
$countdown = $currentTime->diff($expirationTime); 
$countdown1 = $countdown->format("%H:%I:%S"); 
print_r($countdown1);die;