Php 为什么在过去创建的项目上的时间戳的值大于当前时间

Php 为什么在过去创建的项目上的时间戳的值大于当前时间,php,mysql,Php,Mysql,我正在尝试设置密码重置令牌的到期日。为此,在通过电子邮件发送给用户之前,我的令牌将被插入到我的数据库中,并带有ON_UPDATE_CURRENT_时间戳。当用户单击电子邮件中的链接重置密码时,我将验证他的令牌,并检查其是否已过期 为此,我拉出令牌的时间戳,通过strotime()将其转换为UNIX时间戳,然后将其与time()中的值进行比较。如果时间戳之间的差值大于设定值,则认为它已过期 但是,当我回显时间戳时,我注意到令牌的时间戳的值高于time()生成的时间戳。如果UNIX时间戳表示1970

我正在尝试设置密码重置令牌的到期日。为此,在通过电子邮件发送给用户之前,我的令牌将被插入到我的数据库中,并带有ON_UPDATE_CURRENT_时间戳。当用户单击电子邮件中的链接重置密码时,我将验证他的令牌,并检查其是否已过期

为此,我拉出令牌的时间戳,通过strotime()将其转换为UNIX时间戳,然后将其与time()中的值进行比较。如果时间戳之间的差值大于设定值,则认为它已过期

但是,当我回显时间戳时,我注意到令牌的时间戳的值高于time()生成的时间戳。如果UNIX时间戳表示1970年1月1日之后的秒数,为什么过去生成的时间戳的值大于现在生成的时间戳的值

我的代码(摘录):


为什么creationdate时间戳大于“时间”时间戳?

我只是把这个放在这里,以防将来有读者遇到与我相同的问题

您可以运行以下代码来查看服务器使用的时区(在我的例子中是apache)

。在我的例子中,我的SQL server的时区是我的计算机的时区,但我的apache的时区是欧洲/伦敦,这导致了差异


我通过转到php.ini文件并将默认值更改为本地时区来更改apache服务器的默认时区,从而解决了这个问题。(您可以在google上查找完整的php时区列表,然后相应地编辑您的php.ini文件。)

首先是一个明显的问题,您是否验证了数据库服务器和Web服务器之间的时区设置相同?PHP和MySQL服务器之间的时区差异?我目前在localhost上,如何检查和设置时区设置?如果您运行此查询,您可以看到MySQL服务器使用的时区
SELECT@@global.time\u zone,@@session.time\u zone
@adear11查询的结果是系统,我假定这是我当前的计算机时间。我在谷歌上搜索了一下,设法将php.ini文件中的默认时区改为我的本地时区。谢谢
while($checktoken=$verifyuser->fetch(PDO::FETCH_ASSOC))
        {
            $userid=$checktoken["UserID"];
            $creationdate=$checktoken["CreationDate"];
        }
        $time=time();
        $creationdate=strtotime($creationdate);
        $diff=$creationdate - $time ;
        $limit=60*60*24;//60 sec*60min*24 hrs -> 1 day
        //token has expired
        if($diff > $limit)
        {
            echo"Your token has expired, please get a new one <a href='#'>here</a>";
        }
        else
        {
            $valid="true";
        }
Creationdate:1388626104,time:1388600526, Diff:25578, limit:86400(24 hours)
if (date_default_timezone_get()) {
    echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />';
}

if (ini_get('date.timezone')) {
    echo 'date.timezone: ' . ini_get('date.timezone');
}
SELECT @@global.time_zone, @@session.time_zone