From 7cdb2e45757e4cffe48d067628107220808a00d3 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Thu, 29 Mar 2012 15:38:28 +0800 Subject: [PATCH] MDL-32234 Library: usergetdate return different values when timezone is set usergetdate should return consistent values for different timezone. There are two return path 1. If timezone is servertime, it returns getdate 2. If timezone other then servertime, it use gmstrftime, which returns string and values with leading zero. In second case, leading zero's are removed and values are type casted. One major fix is with yday, getdate returns 0 through 365, whereas %j returns 001 through 366. This has been fixed as well. --- lib/moodlelib.php | 9 +++++++++ lib/simpletest/testmoodlelib.php | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/moodlelib.php b/lib/moodlelib.php index d03872463ff..14570a6e707 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -1798,6 +1798,15 @@ function usergetdate($time, $timezone=99) { $getdate['seconds'] ) = explode('_', $datestring); + // set correct datatype to match with getdate() + $getdate['seconds'] = (int)$getdate['seconds']; + $getdate['yday'] = (int)$getdate['yday'] - 1; // gettime returns 0 through 365 + $getdate['year'] = (int)$getdate['year']; + $getdate['mon'] = (int)$getdate['mon']; + $getdate['wday'] = (int)$getdate['wday']; + $getdate['mday'] = (int)$getdate['mday']; + $getdate['hours'] = (int)$getdate['hours']; + $getdate['minutes'] = (int)$getdate['minutes']; return $getdate; } diff --git a/lib/simpletest/testmoodlelib.php b/lib/simpletest/testmoodlelib.php index 9f8a0c8bb03..6514d65a294 100644 --- a/lib/simpletest/testmoodlelib.php +++ b/lib/simpletest/testmoodlelib.php @@ -580,7 +580,7 @@ class moodlelib_test extends UnitTestCase { $this->assertEqual($wday,3); $this->assertEqual($mon,12); $this->assertEqual($year,2009); - $this->assertEqual($yday,357); + $this->assertEqual($yday,356); $this->assertEqual($weekday, 'Wednesday'); $this->assertEqual($month, 'December'); @@ -595,7 +595,7 @@ class moodlelib_test extends UnitTestCase { $this->assertEqual($wday,3); $this->assertEqual($mon,12); $this->assertEqual($year,2009); - $this->assertEqual($yday,357); + $this->assertEqual($yday,356); $this->assertEqual($weekday, 'Wednesday'); $this->assertEqual($month, 'December');