PHP工作时间报告



我想知道是否有人能帮我?

我有一个PHP员工时间表,通过输入开始和结束时间来跟踪他们的工作时间,代码如下;

<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Type Month/Date/Year" title="Type Month/Date/Year">
<table id="myTable">
<tr class="header">
<th scope="col">Date</th>
<th scope="col">Start Time</th>
<th scope="col">End Time</th>
<th scope="col">Activity</th>
</tr>
<?php foreach($activity as $user_activity) { ?>
<tr>
<td scope="row"><?php echo $user_activity['date']; ?></td>
<td><?php echo $user_activity['start_time']; ?></td>
<td><?php echo $user_activity['end_time']; ?></td>
<td><?php echo $user_activity['activity']; ?></td>
</tr>
<?php } ?>
</table>
</div>
<form method="post" action="index.php">
<div class="form-row">
<input type="hidden" name="user_id" value="<?php echo $_SESSION['id']; ?>">
<div class="form-group col-md-4">
<label for="inputEmail4">Start time</label>
<input type="time" class="form-control" id="inputEmail4" name="start_time" required>
</div>
<div class="form-group col-md-4">
<label for="inputPassword4">End Time</label>
<input type="time" class="form-control" id="inputPassword4" name="end_time" required>
</div>
</div>
<div class="form-group">
<label for="inputAddress">Activity Details</label>
<!-- <input type="text" class="form-control" name="activity"> -->
<textarea name="activity" id="" cols="30" class="form-control" rows="5"></textarea>
</div>
<button type="submit" class="btn btn-primary">Add</button>
</form>
</div>

我是否可以生成一份报告,并获得每个员工在4周内的总工作时间?

非常感谢:(

假设您的开始和结束时间是时间类型,而日期是日期类型,则看起来如下:http://sqlfiddle.com/#!9/69b9c4/4

架构:

create table task_activity (id int, user_id int, start_time time, end_time time, activity varchar(255), occur_date date, primary key(id));
insert into task_activity values (1, 1, '12:00', '14:00', 'activity', '2020-07-06');
insert into task_activity values (2, 1, '8:00', '10:00', 'activity', '2020-07-03');
insert into task_activity values (3, 1, '8:00', '10:00', 'activity', '2020-06-03');
insert into task_activity values (4, 2, '8:00', '16:00', 'activity', '2020-07-06');

我创建了表,2个用户:用户id:1有3个工作条目。7月6日12:00至14:00,7月3日8:00至10:00。还有6月3日8:00-10:00的入场券(不应计算在内,因为这超过了4周(。第二个用户id:2有一个条目。7月6日8:00至16:00。

现在查询:

select user_id, hour(sec_to_time(sum(time_to_sec(end_time) - time_to_sec(start_time)))) as hours_worked, count(id) as activities
from task_activity
where occur_date between (now() - interval 4 week) and now()
group by user_id

重要部件:

  • 按user_id分组,因为我们希望将每个用户的数据列为单个报告行
  • hours_worked列:我们从end_time中减去start_time的秒数,对这些值求和,然后转换回时间。然后,正如你所问的那样,我们只显示该时间跨度的小时值
  • where删除不在最近4周内的所有日期
  • 为了便于演示,还有一些活动列显示了每个用户考虑了多少不同的活动

结果:

| user_id | hours_worked | activities |
|---------|--------------|------------|
|       1 |            4 |          2 |
|       2 |            8 |          1 |

用户1在此期间工作了4个小时(我们根据他的2个工作日志条目计算,跳过了一个,因为它太旧了(。

用户2工作了8个小时(根据单个条目计算(。

我希望该表只有两个日期时间列:开始和结束,但您没有这种设置。

我也没有考虑重叠的工作日志(例如,同一用户在同一天记录两次相同的时间(,但我认为这超出了这个问题的范围,可以在添加条目时进行验证。

最新更新