diff options
Diffstat (limited to 'app/Models/StatsDAOPGSQL.php')
| -rw-r--r-- | app/Models/StatsDAOPGSQL.php | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/app/Models/StatsDAOPGSQL.php b/app/Models/StatsDAOPGSQL.php index 5e3476808..c4a5e5c05 100644 --- a/app/Models/StatsDAOPGSQL.php +++ b/app/Models/StatsDAOPGSQL.php @@ -3,6 +3,17 @@ declare(strict_types=1); class FreshRSS_StatsDAOPGSQL extends FreshRSS_StatsDAO { + #[\Override] + protected function sqlDateToIsoGranularity(string $field, int $precision, string $granularity): string { + $offset = $this->getTimezoneOffset(); + return match ($granularity) { + 'day' => "to_char(to_timestamp(($field / $precision) + $offset), 'YYYY-MM-DD')", + 'month' => "to_char(to_timestamp(($field / $precision) + $offset), 'YYYY-MM')", + 'year' => "to_char(to_timestamp(($field / $precision) + $offset), 'YYYY')", + default => throw new InvalidArgumentException('Invalid date granularity'), + }; + } + /** * Calculates the number of article per hour of the day per feed * @@ -43,8 +54,9 @@ class FreshRSS_StatsDAOPGSQL extends FreshRSS_StatsDAO { if ($feed) { $restrict = "WHERE e.id_feed = {$feed}"; } + $offset = $this->getTimezoneOffset(); $sql = <<<SQL -SELECT extract( {$period} from to_timestamp(e.date)) AS period +SELECT extract( {$period} from to_timestamp(e.date + {$offset})) AS period , COUNT(1) AS count FROM `_entry` AS e {$restrict} |
