【问题标题】:PHP Reporting on Hours WorkedPHP 报告工作时间
【发布时间】:2020-07-06 10:19:18
【问题描述】:

我想知道是否有人可以帮助我?

我有一个 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 周内的总工作时数?

非常感谢:)

【问题讨论】:

  • 表task_activity id user_id start_time end_time 活动日期

标签: php mysql time report


【解决方案1】:

假设您的开始和结束时间是时间类型,而日期是日期类型,它看起来像这样: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 的秒数,将这些值相加并转换回时间。然后正如你所问 - 我们只显示该时间跨度的小时值
  • 其中删除所有不在过去 4 周内的日期
  • 出于演示目的,还有活动列显示了为每个用户考虑了多少不同的活动。

结果:

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

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

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

我希望表格只有 2 个日期时间列:开始和结束,但您没有此设置。

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

【讨论】:

  • 非常感谢你,我已经得到了我需要的东西:)
  • @PongleTheDay 很高兴我能帮上忙。考虑接受答案
  • @PongleTheDay 在答案的左侧,上下投票按钮的位置还应该有一个“检查”图标,用于接受给定的答案。
猜你喜欢
  • 2014-04-22
  • 2011-08-29
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-28
相关资源
最近更新 更多