File: /var/www/BtPayments/BtPayments-platform/app/Libraries/LaravelKit/ChartJS.php
<?php
namespace App\Libraries\LaravelKit;
use Carbon\Carbon;
class ChartJS
{
public Carbon $startDate;
public Carbon $endDate;
public array $dates;
public array $datasets;
public function __construct(Carbon $startDate, Carbon $endDate, array $datasets)
{
$this->startDate = $startDate;
$this->endDate = $endDate;
$this->datasets = $datasets;
for ($date = $startDate; $date <= $endDate; $date->addDay()) {
$this->dates[] = $date->format('Y-m-d');
}
}
public static function makeData(Carbon $startDate, Carbon $endDate, $data)
{
$instance = new self($startDate, $endDate, $data);
return $instance->handler();
}
public function handler()
{
$datasets = [];
foreach ($this->datasets as $label => $data) {
$dataset = [
'label' => $label,
'data' => $this->formatChartDataByDates($data),
];
if (array_key_first($this->datasets) !== $label) $dataset['hidden'] = true;
$datasets[] = $dataset;
}
return [
'labels' => array_map(fn($date) => substr($date, 5), $this->dates),
'datasets' => $datasets,
];
}
/**
* 按日期格式化图表数据
*/
protected function formatChartDataByDates($data)
{
$result = [];
foreach ($this->dates as $date) {
$result[] = $data->get($date, 0);
}
return $result;
}
}