如何在循环php中添加日期时间之间的差异?

如何在循环php中添加日期时间之间的差异?,php,datetime,Php,Datetime,我想得到所有创建时间和changedon时间之间的平均值,所以我必须得到每一行的差异并添加它,我尝试了下面的代码,但它不起作用,我不知道为什么,因为我单独尝试了每一条语句,效果很好 while($row = $result->fetch_assoc()) { $changedon = new DateTime($row['changedon']); $createdtime = new DateTime($row['createdtime']); if ($i =

我想得到所有创建时间和changedon时间之间的平均值,所以我必须得到每一行的差异并添加它,我尝试了下面的代码,但它不起作用,我不知道为什么,因为我单独尝试了每一条语句,效果很好

while($row = $result->fetch_assoc()) {
    $changedon = new DateTime($row['changedon']);
    $createdtime = new DateTime($row['createdtime']);

    if ($i == 0) {
        $total_time = $createdtime->diff($changedon);
        $i++;
    } else {
        $total_time->add($createdtime->diff($changedon));
    }
}

echo $total_time->format('%y years %m months %a days %h hours %i minutes %s seconds');

DateInterval
不适合计算平均值。你得自己做一些计算。这可能是一个起点:

$createdSeconds = 0;
$changedSeconds = 0;
$items = 0;
while($row = $result->fetch_assoc()) {
    $changedon = new DateTime($row['changedon']);
    $createdtime = new DateTime($row['createdtime']);
    $createdSeconds += $createdtime->getTimestamp();
    $changedSeconds += $changedon->getTimestamp();
    $items++;
}
printf(
    'Average time between create and change is %d seconds',
    ($changedSeconds - $createdSeconds) / $items
);

DateInterval
不适合计算平均值。你得自己做一些计算。这可能是一个起点:

$createdSeconds = 0;
$changedSeconds = 0;
$items = 0;
while($row = $result->fetch_assoc()) {
    $changedon = new DateTime($row['changedon']);
    $createdtime = new DateTime($row['createdtime']);
    $createdSeconds += $createdtime->getTimestamp();
    $changedSeconds += $changedon->getTimestamp();
    $items++;
}
printf(
    'Average time between create and change is %d seconds',
    ($changedSeconds - $createdSeconds) / $items
);

你忘了除以记录的数量吗?它真的与所有那些php版本相关吗?它还没有显示总数!!没有,但我真的需要帮助,因为我只问了php,但没有人回答我,所有这些php版本可能会使人们不太倾向于点击这个问题;很多人都会忽略特定于过时版本的问题,因此,如果您的问题有php5.2标签(例如,即使5.5在今天的技术上已经过时),他们可能会过滤掉您的问题。试着用“datetime”之类的术语来标记。你忘了除以记录数吗?它真的与所有那些php版本相关吗?它还没有显示总数!!没有,但我真的需要帮助,因为我只问了php,但没有人回答我,所有这些php版本可能会使人们不太倾向于点击这个问题;很多人都会忽略特定于过时版本的问题,因此,如果您的问题有php5.2标签(例如,即使5.5在今天的技术上已经过时),他们可能会过滤掉您的问题。试着用“datetime”这样的术语来标记。我已经在做了,但是我想添加这个减法的结果!好的,很抱歉,再次检查答案有一个函数可以这样做我已经在做了,但是我想把这个减法的结果加起来!好的,很抱歉,请再次检查答案有一个函数可以执行此操作我的错,我应该使用
printf()
而不是
sprintf()
。更新了代码<代码>printf()输出,返回。在这种情况下,
%d
被替换为一个数字。糟糕,我应该使用
printf()
而不是
sprintf()
。更新了代码<代码>printf()输出,返回。在这种情况下,
%d
将替换为一个数字。