PHP签入/签出时间计算

时间:2015-02-03 22:05:46

标签: php time date-arithmetic

我在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

我知道如果有"签入"进入并且没有"签出"最后项目的进入,然后它可能会说他们已经被检查了很长时间 - 但这暂时还可以 - 除非当然答案可以通过在午夜封顶来解决这个问题。

帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

从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);

希望这可以提供帮助;)