我正在开发一个时钟应用程序。
当员工上班时,当前日期和时间将保存为分配给变量$ clockin_time的时间戳记。当员工超时时,当前日期和时间将保存为分配给变量$ clockout_time的时间戳记。然后,我使用一些数学运算来计算两个时间戳之间的持续时间,以查看该员工在clockin_time和clockout_time之间工作了多长时间。所有这些都很好。
我们公司的薪资期限为一周的下个星期四至下一周的下一个星期四,因此,本周四的午夜是当前薪资期间的截止日期。但是,我们的员工从晚上7点至凌晨5点工作。如果员工在星期三晚上7点至星期四凌晨5点工作,则应将午夜之前的所有工作时间都添加到他们以前的工资期中,并将午夜之后的所有工作时间都添加到下一个工资期中。
我的问题是,如果某个员工在星期三晚上上班,在星期四早上下班,并且我将他们的开始时间和结束时间作为时间戳记,那么我如何确定他们在星期三工作了多少小时以及多少小时他们在星期四工作吗?
答案 0 :(得分:0)
您绝对应该检查https://carbon.nesbot.com/docs/
文档中的小示例:
$mutable = Carbon::now();
$immutable = CarbonImmutable::now();
$modifiedMutable = $mutable->add(1, 'day');
$modifiedImmutable = CarbonImmutable::now()->add(1, 'day');
var_dump($modifiedMutable === $mutable); // bool(true)
var_dump($mutable->isoFormat('dddd D')); // string(11) "Saturday 26"
var_dump($modifiedMutable->isoFormat('dddd D')); // string(11) "Saturday 26"
// So it means $mutable and $modifiedMutable are the same object
// both set to now + 1 day.
var_dump($modifiedImmutable === $immutable); // bool(false)
var_dump($immutable->isoFormat('dddd D')); // string(9) "Friday 25"
var_dump($modifiedImmutable->isoFormat('dddd D')); // string(11) "Saturday 26"
// While $immutable is still set to now and cannot be changed and
// $modifiedImmutable is a new instance created from $immutable
// set to now + 1 day.
$mutable = CarbonImmutable::now()->toMutable();
var_dump($mutable->isMutable()); // bool(true)
var_dump($mutable->isImmutable()); // bool(false)
$immutable = Carbon::now()->toImmutable();
var_dump($immutable->isMutable()); // bool(false)
var_dump($immutable->isImmutable()); // bool(true)
答案 1 :(得分:0)
如果您打算在MySQL中执行此操作,则:
select timestampdiff(hour, clockout_time, clockin_time)
from work_sessions;
为您提供小时数差异。让我们进一步解决这个问题:
select timestampdiff(hour, clockout_time, date(clockout_time)) as aftermidnight, timestampdiff(hour, date(clockout_time), clockin_time)
from work_sessions;
我没有对此进行测试,因此,如果这为您提供了一个小时的整数值,则可以通过传递分钟而不是小时来提高精度,然后进行计算。
在PHP中,假设您有两个日期时间$clockinTime
和$clockoutTime
,然后
$diff = $clockoutTime->diff($clockinTime);
计算差异。
$totalHours = $diff->h;
将为您提供总工作时间。
$afterMidnight = date('H', $date);
$beforeMidnight = $totalHours - $afterMidnight;
您的距离以小时为单位。
注意,我没有测试任何代码,因此,如果您遇到问题,请告诉我。