diff --git a/app/Utils/Traits/MakesTimezoneAdjustment.php b/app/Utils/Traits/MakesTimezoneAdjustment.php new file mode 100644 index 000000000000..e97d19c0f6e3 --- /dev/null +++ b/app/Utils/Traits/MakesTimezoneAdjustment.php @@ -0,0 +1,40 @@ +getOffset($utc_date); + $myInterval = \DateInterval::createFromDateString((string)$offset . 'seconds'); + $utc_date->add($myInterval); + + return $utc_date; + + } + + + public function createUtcDate($client_date, $timezone) + { + + $userTimezone = new \DateTimeZone($timezone); + $gmtTimezone = new \DateTimeZone('GMT'); + //$clientDateTime = new \DateTime($client_date, $userTimezone); + $offset = $userTimezone->getOffset($client_date); + $myInterval = \DateInterval::createFromDateString((string)$offset . 'seconds'); + $client_date->add($myInterval); + + return $client_date; + } + +} \ No newline at end of file diff --git a/tests/Unit/TimezoneTraitTest.php b/tests/Unit/TimezoneTraitTest.php new file mode 100644 index 000000000000..1182d4ab6b4b --- /dev/null +++ b/tests/Unit/TimezoneTraitTest.php @@ -0,0 +1,42 @@ +createClientDate($date_time, $client_timezone); + + $this->assertEquals($utc_date->format('Y-m-d'), '2007-04-19'); + } + + public function testConvertClientDateToUTCDateTimeSameDay() + { + + $date_src = '2007-04-19 21:59'; + $client_timezone = 'Europe/Amsterdam'; // +1 UTC + $date_time = new \DateTime($date_src, new \DateTimeZone($client_timezone)); + + $utc_date = $this->createUtcDate($date_time, $client_timezone); + + $this->assertEquals($utc_date->format('Y-m-d'), '2007-04-19'); + } + +} \ No newline at end of file