【问题标题】:Detecting which shift or shifts an employee has worked in检测员工在哪个班次或多个班次中工作
【发布时间】:2013-12-11 20:28:12
【问题描述】:

我正在尝试制作一个员工管理系统,员工可以进入其中并输入他们工作的日期,从什么时间到什么时间(例如 10:00 到 18:00)等等。

所以棘手的部分是,在我的工作中,工资会发生变化。比如早班(00:00 到 06:00)、午班(06:00 到 17:00)和夜班(17:00 到 00:00)。

因此,我想制作一个 PHP 系统,它可以自动检测他们的时间处于哪个“工资率”。

我尝试了很多方法,比如:

<?php
  $timeStart = $_POST["timeStart"];
  $timeEnd = $_POST["timeEnd"];

  if($timeStart >= "00:00" AND $timeEnd <= "06:00"){
    $rate1 = "1";
  }
?>

但现在我知道你不会像那样操作时间,它不会起作用。

这个系统还有一个棘手的问题,我也无法开始工作。

如果员工输入他从 18:00 到 02:00 工作了 8 小时,则它在两个“工资率”之内,这应该会使系统更改 $rate3,即夜班到值"1" 并将$rate1 更改为值"1" 等等。

所以我想问一下你们是否知道如何让这一切顺利进行。

【问题讨论】:

  • 时间的格式是什么?
  • 尝试 PHP 的 strtotime 函数以获得更好的比较。
  • @AbraCadaver 时间格式是 hh:mm 如果你问的是这个
  • 有人可以帮忙吗?
  • 如果您将此数据存储在 SQL 数据库中,那么使用日期和时间维度表计算每小时费率变化可能会更容易

标签: php time


【解决方案1】:
$timeStart = date('Gi', strtotime($_POST["timeStart"]));
$timeEnd = date('Gi', strtotime($_POST["timeEnd"]));

if($timeStart >= 0 && $timeEnd <= 600){
    $rate1 = "1";
}

另一部分要复杂得多。

【讨论】:

  • 您最好只使用时间戳来防止跨越午夜的问题(200-2000=-1800 而不是 6 小时)。同样使用Gi 有点奇怪,因为您可能会以分钟> 60 结束。
  • @Jonathan Kuhn:在给定 OP 输入的情况下,您有 “使用时间戳” 的示例吗?另外,i 将如何返回大于 59 的值?
  • 你是对的,给定上面的代码,你不会返回任何东西 > 59,但是,考虑到未来,OP 想要做的下一步是计算员工每个费率的小时数工作。时间戳会让这变得更容易,就好像我从 430 工作到 1215,一个 7:45 的班次,从 1215 中减去 430 会得到 785,它并不能很好地转换为时间。只是说使用时间戳,您可以同时获得轮班和每个轮班的工作时间,而无需两次不同的计算/转换。
  • @JonathanKuhn 您能否描述一下如何,因为这听起来很有希望?提前致谢
猜你喜欢
  • 2012-08-25
  • 2016-10-30
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多