diff --git a/lib/Cake/Test/Case/Utility/CakeTimeTest.php b/lib/Cake/Test/Case/Utility/CakeTimeTest.php index dffb7cc973c..7193988dd15 100644 --- a/lib/Cake/Test/Case/Utility/CakeTimeTest.php +++ b/lib/Cake/Test/Case/Utility/CakeTimeTest.php @@ -394,6 +394,27 @@ public function testToUnix() { $this->assertEquals(false, $this->Time->toUnix(null)); } +/** + * testToServer method + * + * @return void + */ + public function testToServer() { + $tzBackup = date_default_timezone_get(); + + date_default_timezone_set('UTC'); + $serverTime = new DateTime('now'); + + $timezones = array('Europe/London', 'Europe/Brussels', 'UTC', 'America/Denver', 'America/Caracas', 'Asia/Kathmandu'); + foreach ($timezones as $timezone) { + $result = $this->Time->toServer($serverTime->format('Y-m-d H:i:s'), $timezone, 'U'); + $tz = new DateTimeZone($timezone); + $this->assertEquals($serverTime->format('U'), $result + $tz->getOffset($serverTime)); + } + + date_default_timezone_set($tzBackup); + } + /** * testToAtom method * diff --git a/lib/Cake/Utility/CakeTime.php b/lib/Cake/Utility/CakeTime.php index e027e689393..4b6c46b3575 100644 --- a/lib/Cake/Utility/CakeTime.php +++ b/lib/Cake/Utility/CakeTime.php @@ -471,6 +471,23 @@ public static function toUnix($dateString, $timezone = null) { return self::fromString($dateString, $timezone); } +/** + * Returns a formatted date in server's timezone. + * + * @param string $dateString Datetime string + * @param mixed $timezone Timezone string or DateTimeZone object + * @param string $format date format string + * @return mixed Formatted date + */ + public static function toServer($dateString, $timezone = null, $format = 'Y-m-d H:i:s') { + if ($timezone === null) { + $timezone = Configure::read('Config.timezone'); + } + $time = new DateTime($dateString, new DateTimeZone($timezone)); + $time->setTimezone(new DateTimeZone(date_default_timezone_get())); + return $time->format($format); + } + /** * Returns a date formatted for Atom RSS feeds. *