PHP 中的时间计算使用 MySQL 查询

Time Calculation in PHP using MySQL Query

我要在 PHP 中构建一个报告,其中我需要时差乘以员工工资的时薪。

例如:

Employee     Clock-In           Clock-Out     Total-Hours  Rate  Salary
Mike    2015-01-01 22:57:09 2015-01-02 11:48:14 12:51:05    10  128.51
Mike    2015-01-03 11:48:51 2015-01-06 22:19:27 82:30:36    10  825.10
Mike    2015-01-06 21:19:40 2015-01-06 22:00:00 00:40:20    10  6.72

我的查询如下

SELECT tt.id,ts.fname,tt.punch_in,tt.punch_out,
SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)) as working_hours_new,ter.hourlyrate,
((SUBSTRING(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)),1,2) + SUBSTRING(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)),4,2)/60 + SUBSTRING(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)),7,2)/3600) * ter.hourlyrate) as pay
from tbl_times as tt left join tbl_server as ts on ts.serverid = tt.user_id left join tbl_employee_rates as ter on ter.userid=tt.user_id 
where ts.locationid = ? and ts.active = 1 and ter.stauts = 1 and date(punch_in) >=  ? and date(punch_out) <= ?

如果这不是一个简单的方法,我应该在 PHP 中做...有什么建议吗?

每种编程语言或系统都旨在以适当的方式完成一定数量的活动,而其他活动则不多。

SQL 是 designed to handle a set of certain activities

如果您的任务是该集合的子集,那么您应该使用 SQL 来完成您的任务,除非您可以专门找到一种编程语言或系统 设计来完成它以更恰当的方式.

在您的情况下,您依赖于 joinsfiltering data 等,SQL 专门设计用于handle - 所以你绝对应该用 SQL.

来做

考虑将您的代码包装在函数、包或视图中,以使您的查询可在所有系统中重复使用。

为什么不试试:(假设mysql)

((UNIX_TIMESTAMP(tt.punch_out) - UNIX_TIMESTAMP(tt.punch_in)) / 3600) * ter.hourlyrate AS salary