计算DB和当前时间之间的时差

时间:2015-06-14 21:20:34

标签: php

首先关闭 - 我使用MySQLi Procedural方法MySQL通过PHP

我正在尝试创建一种方法,单击按钮来设置"计时器"。根据我的理解,最好的方法(动态计时器 - IE:点击5分钟)是计算time()距离现在和#34; 5分钟的距离。

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

现在代码:

我用它来从SQL中取出我的DT变量(YYYY-MM-DD HH-MM-SS):

$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,并且它们正确显示。我现在要做的就是找出差异。我尝试了多种方法,但似乎没有任何效果。最近我做了:

$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;

相同的错误。

2 个答案:

答案 0 :(得分:0)

这可能是最不优雅的解决方案,但你可以将你的时间字符串切换为“d,m,y,h,i,s” - 子串并将它们提供给http://php.net/manual/de/function.mktime.php。然后计算时间戳的差异。

答案 1 :(得分:0)

date_diff - 返回两个 DateTime对象

之间的差异

并且您将非对象传递给函数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;