PHP 签入/签出时间计算


PHP Checkin/Checkout Time Calculations

>我有一个php数据数组 - 它并不完美,但这是其中一个例子。

"time_in": [
    "22:17:23",
    "22:17:26",
    "22:17:27",
    "22:17:28",
    "22:18:54",
    "22:19:28",
    "22:20:49",
    "22:20:52",
    "22:22:17",
    "22:31:13"
],
"time_out": [
    "22:17:33",
    "22:18:47",
    "22:18:52",
    "22:18:52",
    "22:19:12",
    "22:22:08"
]

我需要找出一个公式来计算$total_time_in$total_time_out

我知道,如果最终项目有一个"签入"条目而没有"签出"条目,那么它可能会说他们已经签入了很长时间 - 但暂时没关系 - 除非答案当然可以通过在午夜限制它来解决这个问题。

帮助将不胜感激。

从 PHP 5.3 开始,您可以使用 DateTime 对象,它们提供了一种处理日期和时间的简单方法。因此,首先,您可以使用静态方法createFromFormat,知道生成的对象将在当前日期初始化。

$a =  DateTime::createFromFormat('H:i:s', '22:17:23');
$b =  DateTime::createFromFormat('H:i:s', '22:17:33');
$interval = $a->diff($b); 
echo $interval->format('%R%s second(s)'); 
echo "'n"

接下来,如果你有一个变量 $in = ['t1', t2 ..] 并且$out你只能这样做:

$k = 0;
array_map(function($inputTime) use ($out, &$k) {
$a =  DateTime::createFromFormat('H:i:s', $inputTime);
if (!isset($out[$k])) {
  return;
}
$b =  DateTime::createFromFormat('H:i:s', $out[$k] );
$interval = $a->diff($b); 
echo $interval->format('%R%s second(s)'); 
echo "'n";
$k++;
},$in);

希望这对;)有所帮助