php - 我的时间戳有什么问题吗?

标签 php mysql unix timezone timestamp

所以基本上,几天前我使用了 MySQL 数据库,并将时区设置为 MST 以与我的 PHP 脚本所在的服务器相匹配(我还将 PHP 服务器时区设置为 MST (date_default_timezone_set("MST"))与数据库匹配)。我有一个函数需要一个参数,即 UNIX 时间戳。

function time_elapsed_string($time)
{
    $time = time() - $time;

    $tokens = array(
        31536000 => 'year',
        2592000 => 'month',
        604800 => 'week',
        86400 => 'day',
        3600 => 'hour',
        60 => 'minute',
        1 => 'second'
    );

    foreach($tokens as $unit => $text)
    {
        if($time < $unit) continue;
        $numberOfUnits = floor($time / $unit);
        return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
    }
}

此函数的作用是花费$time。它获取当前时间和 $time 之间的时间差,并将 $time 设置为该差值。然后,它计算 $time 可能的最大时间戳并回显它。如果是复数形式(2 周、5 个月等),则会在末尾添加 s

但是,如果我将当前时间作为 $time 参数,它将回显“[SPACE]ago”。我通过将行 $time = time() - $time; 替换为 $time = (time() + 80) - $time; 暂时解决了这个问题,其中我将当前数字 80 增加 5 或 10 以使其准确。

简短说明: 在计算差异时,我必须在当前时间上添加秒数,这样它就不会只回显“[SPACE]ago”。

当我更新页面上的状态时,我正在使用此函数,插入查询被发送到数据库(没有填充时间列),并且因为时间戳列是默认情况下的当前时间戳设置为当前时间戳。

我该如何解决这个问题,因为我真的明白每天添加 5 或 10 将来不会稳定。

PS。我不认为我可以重新启动我的 MySQL 服务器等,因为我在网络主机上,而且我想我没有这样做的正确权限。

编辑1: 看起来插入的时间戳比现实生活中的时间戳早大约 1 分钟。难道是这个原因造成的?

编辑2: 现在,几周后,我需要额外添加 100 到 200 秒,以确保时间前函数准确。

最佳答案

由于您要根据 MySQL 中存储的内容进行差异处理,因此您的选择是:

  1. 在您的服务器上使用网络时间协议(protocol)(请参阅 http://pool.ntp.org/ ),并希望获得最好的结果...
  2. 或者使用 UNIX_TIMESTAMP() 从 MySQL 获取时间在如下选项中:

    • 在您的查询中:SELECT *, UNIX_TIMESTAMP() AS unix_timestamp FROM table
    • 或单独调用:SELECT UNIX_TIMESTAMP() AS unix_timestamp

可选的第二个参数是 secret ,它可以通过将 MySQL 的“unix_timestamp”结果传递到第二个可选参数中来提供帮助,编码优化的差异(您发现 5 到 10 个“工作”),或者只是允许 PHP 时间戳当您的服务器同步时,() 函数将成为上面已经实现的默认函数。

无论哪种方式,都可以像这样对函数进行简单的更新:

function time_elapsed_string($time, $time0 = NULL)
{
    if ($time0 === NULL) 
    {
        $time0 = time();
    }
    $time = $time0 - $time;
    ...

示例用途:

time_elapsed_string($recordTimeStamp);                         // as-is
time_elapsed_string($recordTimeStamp, time() + 5);             // an "optimized" difference
time_elapsed_string($recordTimeStamp, $recordUnixTimeStamp);   // from MySQL addition
time_elapsed_string($recordTimeStamp, $databaseUnixTimeStamp); // from separate query

关于php - 我的时间戳有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17591242/

相关文章:

php - 提供数千张动态加水印的图像?

mysql Convert_tz 在 where 子句中不起作用

mysql - 检索每组中的最后一条记录 - MySQL

linux - sudo 不起作用,但 root 用户可以

unix - unix 中的组播 IPC 选项

php - 将元素添加到其他元素

php - 无法使用 Twitter API 获取 OAuth 访问 token

php - 尝试从 PHP 执行 C 程序并将其输出到 Web 浏览器

mysql - 简单 Select 语句中的存储过程问题 Varchar 中的问题

Python shutdown.rmtree 调用花费了极长的时间