所以基本上,几天前我使用了 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 中存储的内容进行差异处理,因此您的选择是:
- 在您的服务器上使用网络时间协议(protocol)(请参阅 http://pool.ntp.org/ ),并希望获得最好的结果...
或者使用 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/