如何在PHP中计算缺勤时间

时间:2019-01-29 12:34:27

标签: php arrays while-loop counting

我想得到每个学生的缺勤时间。

  

示例:

$student_absence_from_time = 08:00 -> $student_absence_to_time = 10:00 
$student_absence_from_time = 09:00 -> $student_absence_to_time = 10:00 
$student_absence_from_time = 08:00 -> $student_absence_to_time = 09:00`

我想获取$student_absence_from_time$student_absence_to_time之间的差异,并计算该差异以获得每个学生的总缺勤时间,例如10:00-08:00 = 2小时+ 10:00- 08:00 = 2h + 09:00-08:00 = 1小时总缺勤时间为5小时 谢谢:)

2 个答案:

答案 0 :(得分:0)

获取和存储时间戳记是函数time()的结果(自1970年以来的秒数),而不是文本形式。此时间与任何时区无关。 2个时间戳之间的差是消失的秒数。使用date()strftime()(我更喜欢第二个)将时间戳打印为文本。

btw,UNIX_TIMESTAMP()是与time()等效的SQL。

答案 1 :(得分:0)

您可以使用strtotime转换时间,然后使用array-reduce进行计数。

请考虑以下内容:

$arr = array();
$arr[] = array("student_absence_from_time" => "08:00", "student_absence_to_time" => "10:00");
$arr[] = array("student_absence_from_time" => "09:00", "student_absence_to_time" => "10:00");
$arr[] = array("student_absence_from_time" => "08:00", "student_absence_to_time" => "09:00");

function cntAbsence($carry, $item) {
    return $carry +  strtotime($item["student_absence_to_time"]) - strtotime($item["student_absence_from_time"]);
} // adding the different between "from_time" to "to_time"
echo array_reduce($arr, "cntAbsence", 0) / 3600; // time is in second so divided by 3600 to get hours and use 0 as init