我有一个数组,每个元素都有一个start_date和end_date 我想总结两个日期之间的所有时间段并将它们除以3得到平均时间段。
数组
Array
(
[0] => Array
(
[start_date] => "2014-01-30 09:27:02"
[end_date] => "2014-01-30 16:29:38"
)
[1] => Array
(
[start_date] => "2014-01-28 09:27:02"
[end_date] => "2014-01-30 16:29:38"
)
[2] => Array
(
[start_date] => "2014-01-30 09:05:02"
[end_date] => "2014-01-30 12:12:38"
)
)
我需要这样的事情:
$total=0;
foreach($array as $ar)
{
$created_dt=strtotime($ar[$start_date]);
$done_dt=strtotime($ar[$end_date]);
$runing_time= $created_dt - $done_dt - 2*3600;
$runing_time= date('H:i',$runing_time);
$total+=$runing_time;
}
$runing_time=$total/3;
这样做的好方法是什么?
谢谢:))
答案 0 :(得分:1)
从技术上讲,你已经是正确的了。
但是为了让给定的脚本能够正常运行,你可以将其编辑为
$total=0;
foreach($array as $ar)
{
$created_dt=strtotime($ar['start_date']);
$done_dt=strtotime($ar['end_date']);
$runing_time= $created_dt - $done_dt - 2*3600;
$runing_time= date('H.i',$runing_time);
$total+=$runing_time;
}
$runing_time=$total/3;
所以我只改变了3件事。 首先你的$ start_date和$ end_date是一个不存在的变量。
和第二个,如果你想要平均值而不是:put。所以它可以被读作双。
如果你想让变量$ total成为真正的值,我会这样做。
$runing_time= date('H',$runing_time).'.'.date('i',$runing_time)/60*100;
答案 1 :(得分:1)
As shown at this answer这非常简单。 :)(我稍微修改过它)
$now = time(); // or your date as well
$your_date = strtotime("2010-01-01");
$datediff = $now - $your_date;
$numberOfDays = floor($datediff/(60*60*24));
现在你只需将它放在foreach中并在$ numberOfDays中加入另一个变量。
请记得检查第一个日期是否低于第二个日期
答案 2 :(得分:1)
您在尝试将时间段视为日期/时间时犯了一个根本性错误,您不能在时间段内使用date()及其相关函数。
找到时间段平均值的方法是将秒数相加,然后除以周期数。以下功能执行此操作: -
function averageTime(array $times){
$total = 0;
foreach($times as $time){
$total += (new \DateTime($time['end_date']))->getTimestamp() - (new \DateTime($time['start_date']))->getTimestamp();
}
$avSeconds = $total/count($times);
$hours = floor($avSeconds/3600);
$avSeconds -= $hours * 3600;
$minutes = floor($avSeconds/60);
$avSeconds -= $minutes * 60;
$seconds = floor($avSeconds);
return "{$hours}h {$minutes}m {$seconds}s";
}
将示例数组插入其中: -
$times= array(
0 => Array(
'start_date' => "2014-01-30 09:27:02",
'end_date' => "2014-01-30 16:29:38",
),
1 => Array(
'start_date' => "2014-01-28 09:27:02",
'end_date' => "2014-01-30 16:29:38",
),
2 => Array(
'start_date' => "2014-01-30 09:05:02",
'end_date' => "2014-01-30 12:12:38",
),
);
echo "Average time = " . averageTime($times);
输出: -
平均时间= 21小时44分16秒