我正在使用 CodeIgniter,并根据日期计算总时间。
说明:
我正在做的是,每次登录时我都会使用以下代码在数据库中插入last_Ativity日期和时间。
$data_login= array('emp_id' =>$result->id ,'last_activity' =>date("Y-m-d H:i:s", STRTOTIME(date('h:i:sa'))));
$this->db->insert('tbl_current_login',$data_login);
如果用户仍在系统中,last_activity时间会持续更新。 (我正在使用 ajax 来更新日期时间。我还没有共享该代码)。
现在我必须计算特定用户一天(当前日期)的总时间。
例如- emp_id 26
登录两次,所以我必须计算时间
First-time login date and time:-2018-09-17 07:27:55
Second-time login date and time:- 2018-09-17 07:35:22
它会根据用户登录的次数而增加。
我对时间感到困惑。我计算系统登录总小时数的方法是否正确? 我应该使用 MYSQL 查询还是 PHP 来计算?我需要一些想法。 你能帮我解决这个问题吗?
最佳答案
这就是我要做的
last_activity time continuously updating if the user still in the system . (I am using ajax to update the datetime. I haven't shared that code).
在更新行之前。
- 检查是否存在事件行
- 如果是,获取日期的时间戳并减去当前时间(从存储在数据库中的时间中将 last_activity 更改为当前时间)获取该数字并将其添加到名为“elapsed time”之类的整数列中(您必须将其添加到数据库中)
- 如果没有,则输入耗时为 0 的行(取决于您如何放入第一行,也许在登录时),这可能永远不会成为问题。
对于时间戳,您可以执行选择来获取当前行。获取日期时间字段并使用其中之一
$time = strtotime($row['last_activity']);
或者
$time = (new DateTime($row['last_activity']))->getTimestamp();
然后,您只需对要替换的日期执行相同的操作,然后减去即可得到以秒为单位的差异。
$elapsed = time() - $time;
然后将其添加到当前行值并保存。这样您就可以跟踪他们在该 session 期间花费的时间(以秒为单位)的运行总计。
然后,当您需要计算总时间时,这很简单
SELECT SUM(elapsed_time) FROM {table} WHERE DATE(last_Ativity) = :date
如果您只处理数据库中的两个日期时间字段,那么获得它们之间的差异会更容易,但是感觉您已经有了代码来不断更新最后一个事件字段,从长远来看,这将需要更少的工作国际海事组织。
选项2
另一个选项是添加另一个日期时间字段来放入开始时间或登录时间。然后,当您查询时,您可以将它们转换为时间戳并减去以获得差值。
这使得 SQL 变得更加困难(在执行 SUM 时),我无法真正思考如何计算多行上耗时,然后将它们相加。但它确实大大简化了 PHP。所以哪种方式最适合您的需要。考虑一下您是否需要该实用程序知道他们何时登录,或者您是否只是想要一种更简单的方法来计算他们花费的时间。
类似的事情。
关于php - 如何计算登录系统的总时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52373301/