Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Widgets\Chart;
|
||||
|
||||
use DateInterval;
|
||||
use DatePeriod;
|
||||
use DateTimeInterface;
|
||||
|
||||
class PeriodMatcher
|
||||
{
|
||||
/** @var DateTimeInterface $start */
|
||||
protected $start;
|
||||
|
||||
/** @var DateTimeInterface $end */
|
||||
protected $end;
|
||||
|
||||
/** @var DateInterval $interval */
|
||||
protected $interval;
|
||||
|
||||
/** @var string $format */
|
||||
protected $format;
|
||||
|
||||
/** @var DatePeriod $range */
|
||||
protected $range;
|
||||
|
||||
/**
|
||||
* @param DateTimeInterface $start
|
||||
* @param DateTimeInterface $end
|
||||
* @param DateInterval $interval
|
||||
* @param string $format Formate der PHP date()-Funktion
|
||||
*/
|
||||
public function __construct(
|
||||
DateTimeInterface $start,
|
||||
DateTimeInterface $end,
|
||||
DateInterval $interval,
|
||||
$format = 'Y.m.d'
|
||||
) {
|
||||
$this->start = $start;
|
||||
$this->end = $end;
|
||||
$this->interval = $interval;
|
||||
$this->format = $format;
|
||||
$this->range = new DatePeriod($start, $interval, $end);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @param string $dateKey
|
||||
* @param string $valueKey
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function matchData($data, $dateKey, $valueKey)
|
||||
{
|
||||
if ($data === null) {
|
||||
$data = [];
|
||||
}
|
||||
$dates = array_column($data, $dateKey);
|
||||
$values = array_column($data, $valueKey);
|
||||
|
||||
$result = [];
|
||||
foreach ($this->getDates() as $date) {
|
||||
$matchedKey = array_search($date, $dates, true);
|
||||
$result[] = $matchedKey !== false ? (float)$values[$matchedKey] : 0.0;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $format Datumsformat überschreiben
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getDates($format = null)
|
||||
{
|
||||
$result = [];
|
||||
|
||||
/** @var DateTimeInterface $date */
|
||||
foreach ($this->range as $date) {
|
||||
$result[] = $date->format($format !== null ? $format : $this->format);
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user