【问题标题】:PHP Average Date/Time in array数组中的 PHP 平均日期/时间
【发布时间】:2016-01-19 15:17:08
【问题描述】:

我正在为内部构建一个监控系统。它需要能够计算 4 个日期的平均值,然后将它们添加到数组的最后一个元素(如下),以计算出下一个文件的预期时间。

所以我有一个看起来像这样的数组

Array
(
    [0] => 2016-01-05 12:53
    [1] => 2016-01-05 13:05
    [2] => 2016-01-05 14:33
    [3] => 2016-01-07 16:07
)

我想要做的是获取数组中所有这些日期的平均值。 然后,我需要能够将此平均值添加到如下所示的另一个日期以锻炼预期日期。

2016-01-07 16:07 + Average

我希望能够使用 PHP 来实现这一点。 我希望我已经解释得够清楚了吗?

我已经尝试过了,但今年的日期很奇怪,比如 7586

$datesLoaded = array();
$intervals = array();
$expected = array();

foreach ($rows as $row) {
    $datesLoaded[] = $row['mydate'];
}

if (empty($datesLoaded)) {

    echo "empty array";

} else {

for ($i=0; $i < count($datesLoaded)-1; $i++) { 
    $firstFile = strtotime($datesLoaded[$i]);
    $nextFile = strtotime($datesLoaded[$i+1]);
    $interval = $nextFile-$firstFile;
    $intervals[] = $interval;
}

$numOfElements = count($intervals);

$sumOfIntervals = array_sum($intervals);

$meanTime = $sumOfIntervals / $numOfElements;

$lastDate = array_pop($datesLoaded);

$expectedTime = strtotime($lastDate) + $meanTime;

$expectedDate = new DateTime("@$expectedTime");

$expectedDateFormat = $expectedDate->format('j\t\h F - G : i');

$expected['expectedTime'] = $expectedDateFormat;

echo json_encode($expected);

这里是回显的变量

    (
    [0] => 720
    [1] => 5280
    [2] => 178440
)

    num of elements - 3
    sum of intervals - 184440
    mean time - 61480
    last date - 2016-01-07 16:07
    expected time - 1452244300

【问题讨论】:

  • 你能分享你的尝试吗?
  • 您是指所有日期之间的平均时间间隔?
  • @cale_b 查看编辑。
  • @AbraCadaver 抱歉,日期的平均日期/时间。
  • 这是什么意思?给定您的数组的average 是什么?

标签: php arrays date


【解决方案1】:

假设 $intervals 包含每个问题的数组,那么您需要使用 array_map 以便您可以获取 unix 时间戳以便平均它们。

所以改变这一行:

$sumOfIntervals = array_sum($intervals);

阅读:

$sumOfIntervals = array_sum(array_map('strtotime', $intervals));

然后,它将包含平均时间戳,并且您的平均时间和其他计算应该符合您的预期。

【讨论】:

  • 我使用 'last date - 2016-01-07 16:07' strtotime 并添加平均时间
  • 很遗憾没有,我原以为一月份会显示五月份。
  • 让我们退后一步 - 您得到的 average 时间戳是什么? (而且,您使用的日期是否与问题顶部数组中的日期相同?)
  • 但是您不能以该格式添加或分割日期时间字符串。这是一个字符串,他们没有算术。您可以添加和划分时间戳(例如,标准的 UTC seconds-since-the-epoch 时间目前是1453221288)。那么,您能否展示您的日期时间字符串之一,以及认为是对应的时间戳?
  • 问题中这些都不清楚,所以我建议你写一个新问题来显示你正在谈论的实际值。您以前的所有 cmets 和问题本身都提出了其他建议。
猜你喜欢
  • 2019-07-12
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 2012-03-18
  • 2017-06-12
相关资源
最近更新 更多