所以基本上,几天前我玩弄了我的 MySQL 数据库,并将时区设置为 MST 以与我的 PHP 脚本所在的服务器相匹配(我还将 PHP-server 时区设置为 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 ”。我已经暂时解决了这个问题,方法是用我将当前数字 80 增加 5 或 10 的行替换$time = time() - $time;
以$time = (time() + 80) - $time;
使其准确。
简短说明: 在计算要产生的差异时,我必须在当前时间上添加秒数,这样它就不会只回显“ [SPACE]ago ”。
当我更新页面上的状态时,我正在使用此功能,插入查询被发送到数据库(没有填充时间列)并且因为时间戳列是默认的当前时间戳,它被设置为当前时间戳。
我该如何解决这个问题,因为我真的明白每天添加 5 或 10 不会在未来稳定。
PS。我不认为我可以重新启动我的 MySQL 服务器等,因为我在一个网络主机上,我想我没有这样做的正确权限。
EDIT1: 看起来插入的时间戳大约提前 1 分钟,然后在现实生活中。这可能是造成它的原因吗?
EDIT2: 现在,几周后,我需要额外增加 100 到 200 秒,以确保时间前功能是准确的。