gpt4 book ai didi

php - 我如何创建一个系统来计算上次看到的时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:32:03 25 4
gpt4 key购买 nike

我试图在我网站的用户的个人资料页面中向他们显示时间/日期(决定他们上次访问我网站的时间)。完全像这样:

enter image description here

那么我如何计算这个数字(8 分钟前)


目前我有这样一张表:

// requests
+----+----------+-------------+
| id | id_user | unix_time |
+----+----------+-------------+
| 1 | 2353 | 1339412843 |
| 2 | 2353 | 1339412864 |
| 3 | 5462 | 1339412894 |
| 4 | 3422 | 1339412899 |
| 5 | 3422 | 1339412906 |
| 6 | 2353 | 1339412906 |
| 7 | 7785 | 1339412951 |
| 8 | 2353 | 1339413640 |
| 9 | 5462 | 1339413621 |
| 10 | 5462 | 1339414490 |
| 11 | 2353 | 1339414923 |
| 12 | 2353 | 1339419901 |
| 13 | 8007 | 1339424860 |
| 14 | 7785 | 1339424822 |
| 15 | 2353 | 1339424902 |
+----+----------+-------------+

如您所见,上表存储了我网站的所有请求。我的意思是当用户打开(加载)我网站的任何页面时,我会在该表中插入一个新行。然后为了计算 last_seen,我只需为该特定用户选择最后一行并使用他的 unix_time 值。

老实说,我猜我做的是错的(或者至少不是标准的)。因为仅计算 last_seen 的成本很高。

也是几天前,我在服务器中看到一个名为 access_log.txt 的文件,其中包含所有请求。现在我想知道我可以使用该文件吗?它是否也比我目前的方法更好(使用数据库)?总之,我如何计算每个用户的last_seen

最佳答案

只需使用 Datetime::diff,从数据库中最后一个条目获取用户 X 的时间戳。然后创建 2 个 datetime 对象,第一个使用旧代码,第二个使用旧代码当前时间。然后调用diff,将当前时间戳上交。

$datetime1 = new DateTime(date('Y-m-d H:i:s', 1339412843));
$datetime2 = new DateTime(date('Y-m-d H:i:s'));

$diff = $datetime1->diff($datetime2);

echo $diff->y.' Years <br/>';
echo $diff->m.' Months <br/>';
echo $diff->d.' Days <br/>';
echo $diff->h.' Hours <br/>';
echo $diff->i.' Minutes <br/>';
echo $diff->s.' Seconds <br/>';

附录:您目前的做法是正确的。在 mysql 中计算时间差异不像解析访问日志那样昂贵。使用 sql 这是 1 次查询执行、2 个要创建的对象和至少 1 次函数调用。

如果您想使用访问日志,您总是必须解析完整 访问日志。解析所有行,然后过滤掉不相关的行,只保留用户登录的最后一行。如果你的 apache 已经轮换了日志,你还必须在其他日志中搜索你也必须解压缩。

我会保留您当前的策略并尝试对其进行优化,例如

  • 使用联接一次性获取当前页面上可见的所有用户和所有“最后”时间戳。
  • 不要包含“之前看到的秒数”,这样您就可以使用某种缓存。

关于php - 我如何创建一个系统来计算上次看到的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37992604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com