Index: lib/classes/task/scheduled_task.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lib/classes/task/scheduled_task.php (date 1421963831000) +++ lib/classes/task/scheduled_task.php (revision ) @@ -299,7 +299,12 @@ // We need to change to the server timezone before using php date() functions. $origtz = date_default_timezone_get(); if (!empty($CFG->timezone) && $CFG->timezone != 99) { + if (is_numeric($CFG->timezone)) { + $timezone = timezone_name_from_abbr('', ($CFG->timezone * 3600), 0); + date_default_timezone_set($timezone); + } else { - date_default_timezone_set($CFG->timezone); + date_default_timezone_set($CFG->timezone); + } } $daysinmonth = date("t"); Index: lib/tests/scheduled_task_test.php IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lib/tests/scheduled_task_test.php (date 1421963831000) +++ lib/tests/scheduled_task_test.php (revision ) @@ -281,4 +281,26 @@ $this->assertDebuggingCalled(); $this->assertNull($task); } + + public function test_all_timezones() { + global $CFG; + + $this->resetAfterTest(true); + + $timezones = get_list_of_timezones(); + + foreach (array_keys($timezones) as $timezone) { + $CFG->timezone = $timezone; + + $testclass = new \core\task\scheduled_test_task(); + $testclass->set_hour('1'); + $testclass->set_minute('0'); + + try { + $testclass->get_next_scheduled_time(); + } catch (Exception $e) { + echo "Invalid timezone: $CFG->timezone with error: {$e->getMessage()}\n"; + } + } + } }