aboutsummaryrefslogtreecommitdiff
path: root/app/Models/StatsDAOPGSQL.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Models/StatsDAOPGSQL.php')
-rw-r--r--app/Models/StatsDAOPGSQL.php14
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}