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