From a16ea5af913cc20527cf3f2fbc1766c91c64d366 Mon Sep 17 00:00:00 2001 From: sgiehl <stefan@piwik.org> Date: Mon, 3 Oct 2016 18:02:42 +0200 Subject: [PATCH] use internal Date class to calculate timezone difference Conflicts: plugins/ScheduledReports/javascripts/pdf.js plugins/ScheduledReports/templates/_addReport.twig --- core/Updates/2.16.3-b3.php | 12 +++++------- plugins/ScheduledReports/Controller.php | 7 +++++-- .../manage-scheduled-report.controller.js | 8 ++++++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/core/Updates/2.16.3-b3.php b/core/Updates/2.16.3-b3.php index 4d28615f6f..a13f7379d0 100644 --- a/core/Updates/2.16.3-b3.php +++ b/core/Updates/2.16.3-b3.php @@ -8,6 +8,7 @@ */ namespace Piwik\Updates; +use Piwik\Date; use Piwik\Plugins\ScheduledReports\API as ScheduledReportsAPI; use Piwik\Plugins\ScheduledReports\Model as ScheduledReportsModel; use Piwik\Site; @@ -33,13 +34,10 @@ class Updates_2_16_3_b3 extends PiwikUpdates protected function adjustTimezoneBySite($hour, $idSite) { - $timezone = Site::getTimezoneFor($idSite); - try { - $dateTimeZone = new \DateTimeZone($timezone); - } catch(\Exception $e) { - return; - } - $timeZoneDifference = -ceil($dateTimeZone->getOffset(new \DateTime()) / 3600); + $timezone = Site::getTimezoneFor($idSite); + $timestampUTC = Date::today()->getTimestampUTC(); + $timestampZone = Date::adjustForTimezone($timestampUTC, $timezone); + $timeZoneDifference = -ceil(($timestampZone - $timestampUTC) / 3600); return (24 + $hour + $timeZoneDifference) % 24; } } diff --git a/plugins/ScheduledReports/Controller.php b/plugins/ScheduledReports/Controller.php index d42b209a91..8bdca90ab7 100644 --- a/plugins/ScheduledReports/Controller.php +++ b/plugins/ScheduledReports/Controller.php @@ -8,6 +8,7 @@ */ namespace Piwik\Plugins\ScheduledReports; +use Piwik\Date; use Piwik\Piwik; use Piwik\Plugins\LanguagesManager\LanguagesManager; use Piwik\Plugins\SegmentEditor\API as APISegmentEditor; @@ -27,9 +28,11 @@ class Controller extends \Piwik\Plugin\Controller $this->setGeneralVariablesView($view); $siteTimezone = $this->site->getTimezone(); - $dateTimeZone = new \DateTimeZone($siteTimezone); - $view->timeZoneDifference = $dateTimeZone->getOffset(new \DateTime()) / 3600; + $timestampUTC = Date::today()->getTimestampUTC(); + $timestampZone = Date::adjustForTimezone($timestampUTC, $siteTimezone); + + $view->timeZoneDifference = ($timestampZone - $timestampUTC) / 3600; $view->countWebsites = count(APISitesManager::getInstance()->getSitesIdWithAtLeastViewAccess()); // get report types diff --git a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js index b0de00ddfe..afc2932898 100644 --- a/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js +++ b/plugins/ScheduledReports/angularjs/manage-scheduled-report/manage-scheduled-report.controller.js @@ -16,7 +16,11 @@ this.reportHours = []; for (var i = 0; i < 24; i++) { - this.reportHours.push({key: i + '', value: i + ''}); + if ((timeZoneDifference*2) % 2 != 0) { + this.reportHours.push({key: i + '.5', value: i + ':30'}); + } else { + this.reportHours.push({key: i + '', value: i + ''}); + } } function scrollToTop() @@ -39,7 +43,7 @@ } function adjustHourToTimezone(hour, difference) { - return '' + ((24 + parseInt(hour) + difference) % 24); + return '' + ((24 + parseFloat(hour) + difference) % 24); } function updateReportHourUtc (report) { -- GitLab