如何在php中找到这样的平均值$ a = 01:04:06:02:55:28 $ b = 03:04:06:02:54:34?

时间:2017-05-09 10:06:18

标签: php datetime

$a = 01:04:06:02:55:28
$b = 03:04:06:02:54:34
//format("%Y:%M:%D:%H:%I:%S")

我想找到这两者的平均值。

在这种情况下,$ a是完成任务1所花费的时间,$ b是完成任务2所花费的时间。现在我想知道该人完成两项任务所花费的平均时间。

2 个答案:

答案 0 :(得分:0)

您可以计算两个时间戳的平均值。的 live demo

<?php
$a = '01:04:06:02:55:28';
$b = '03:04:06:02:54:34';
$aTimestamp = DateTime::createFromFormat('m:d:y:h:i:s', $a, new DateTimeZone('Europe/Warsaw'))->getTimestamp();
$bTimestamp = DateTime::createFromFormat('m:d:y:h:i:s', $b, new DateTimeZone('Europe/Warsaw'))->getTimestamp();
echo date("m:d:y:h:i:s", ($aTimestamp + $bTimestamp)/2);

答案 1 :(得分:0)

如果您的格式与持续时间相对应而不是确切日期,则应使用timedelta对象(请参阅下面的live demo或代码,假设1年= 365天,1个月= 30天)。请注意,timedelta对象只接受几天(而不是几个月或几年,避免歧义)。 Timedelta对象允许算术运算(参见https://docs.python.org/2.4/lib/datetime-timedelta.html

日期时间对象假设一个日历,这意味着它们将使用两个点之间的月和年的实际持续时间(月份范围为28-31,可能是闰年而不是“标准”持续时间)。

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
if ($('div:contains("%")').length > 0){
	var divTxt = $('div:contains("%")').text();
    alert(divTxt);
}
});
</script>
</head>
<body>
<div guid="60b758f8-62e7-42cc-ab66-5eca80642f35">100%</div>

</body>
</html>

或者,您可以只计算每个字段的平均值。但我认为0.5周,0个月,0天而不是0年6个月会很奇怪。但是,如果这是一个有效的选项,代码会更容易:

from datetime import timedelta
a = "01:04:06:02:55:28"
b = "03:04:06:02:54:34"

(y,mo,d,h,mi,s) = a.split(":");

tda = timedelta(days=int(y)*365+int(mo)*30+int(d), hours=int(h), minutes=int(mi), seconds=int(s));

(y,mo,d,h,mi,s) = b.split(":");

tdb = timedelta(days=int(y)*365+int(mo)*30+int(d), hours=int(h), minutes=int(mi), seconds=int(s));

print("a: " + str(tda))
print("b: " + str(tdb))
print("average: " + str((tda+tdb)/2))

# now we only need to format the output as needed
avgtd = (tda+tdb)/2
avgy = avgtd.days/365
avgm = (avgtd.days - avgy*365) / 30
avgd = (avgtd.days - avgy*365 - avgm*30)
avghou = avgtd.seconds / 3600
avgmin =  (avgtd.seconds - avghou*3600) / 60
avgsec =  (avgtd.seconds - avghou*3600 - avgmin*60)

print("average: " + str(avgtd))
print ("{}:{}:{}:{}:{}:{}".format(avgy,avgm,avgd,avghou,avgmin, avgsec))