]> source.dussan.org Git - nextcloud-server.git/commitdiff
enhance formatDate function to accept an optional argument containing the time zone
authorThomas Müller <thomas.mueller@tmit.eu>
Mon, 22 Sep 2014 13:03:28 +0000 (15:03 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 22 Sep 2014 13:03:28 +0000 (15:03 +0200)
lib/private/util.php
lib/public/util.php
tests/lib/util.php

index c5483c1654bfa9e3a65f23701f6298fa6e4d42e1..4d1287bcc854b78390db3afbbd230474f4382518 100755 (executable)
@@ -383,16 +383,26 @@ class OC_Util {
         *
         * @param int $timestamp
         * @param bool $dateOnly option to omit time from the result
+        * @param DateTimeZone|string $timeZone where the given timestamp shall be converted to
         * @return string timestamp
         * @description adjust to clients timezone if we know it
         */
-       public static function formatDate( $timestamp, $dateOnly = false) {
-               if(\OC::$server->getSession()->exists('timezone')) {
-                       $systemTimeZone = intval(date('O'));
-                       $systemTimeZone = (round($systemTimeZone / 100, 0) * 60) + ($systemTimeZone % 100);
-                       $clientTimeZone = \OC::$server->getSession()->get('timezone') * 60;
-                       $offset = $clientTimeZone - $systemTimeZone;
-                       $timestamp = $timestamp + $offset * 60;
+       public static function formatDate($timestamp, $dateOnly = false, $timeZone = null) {
+               if (is_null($timeZone)) {
+                       if (\OC::$server->getSession()->exists('timezone')) {
+                               $systemTimeZone = intval(date('O'));
+                               $systemTimeZone = (round($systemTimeZone / 100, 0) * 60) + ($systemTimeZone % 100);
+                               $clientTimeZone = \OC::$server->getSession()->get('timezone') * 60;
+                               $offset = $clientTimeZone - $systemTimeZone;
+                               $timestamp = $timestamp + $offset * 60;
+                       }
+               } else {
+                       if (!$timeZone instanceof DateTimeZone) {
+                               $timeZone = new DateTimeZone($timeZone);
+                       }
+                       $dt = new DateTime("@$timestamp");
+                       $offset = $timeZone->getOffset($dt);
+                       $timestamp += $offset;
                }
                $l = \OC::$server->getL10N('lib');
                return $l->l($dateOnly ? 'date' : 'datetime', $timestamp);
index 244c11ba2cc18edd81a82bd32852e59a2ac72567..35847fce38af83aa5d5efc093549c45fb69e298a 100644 (file)
@@ -29,6 +29,7 @@
 // use OCP namespace for all classes that are considered public.
 // This means that they should be used by apps instead of the internal ownCloud classes
 namespace OCP;
+use DateTimeZone;
 
 /**
  * This class provides different helper functions to make the life of a developer easier
@@ -167,10 +168,11 @@ class Util {
         * formats a timestamp in the "right" way
         * @param int $timestamp $timestamp
         * @param bool $dateOnly option to omit time from the result
+        * @param DateTimeZone|string $timeZone where the given timestamp shall be converted to
         * @return string timestamp
         */
-       public static function formatDate( $timestamp, $dateOnly=false) {
-               return(\OC_Util::formatDate( $timestamp, $dateOnly ));
+       public static function formatDate($timestamp, $dateOnly=false, $timeZone = null) {
+               return(\OC_Util::formatDate($timestamp, $dateOnly, $timeZone));
        }
 
        /**
index 8964f9f266630b86bab0ca6947d6fe41438bd68d..e43b6309eae26a5ceea7057f070c748e472c5347 100644 (file)
@@ -37,6 +37,30 @@ class Test_Util extends PHPUnit_Framework_TestCase {
                $this->assertEquals($expected, $result);
        }
 
+       function testFormatDateWithTZ() {
+               date_default_timezone_set("UTC");
+
+               $result = OC_Util::formatDate(1350129205, false, 'Europe/Berlin');
+               $expected = 'October 13, 2012 13:53';
+               $this->assertEquals($expected, $result);
+       }
+
+       /**
+        * @expectedException Exception
+        */
+       function testFormatDateWithInvalidTZ() {
+               OC_Util::formatDate(1350129205, false, 'Mordor/Barad-dûr');
+       }
+
+       function testFormatDateWithTZFromSession() {
+               date_default_timezone_set("UTC");
+
+               \OC::$server->getSession()->set('timezone', 3);
+               $result = OC_Util::formatDate(1350129205, false);
+               $expected = 'October 13, 2012 14:53';
+               $this->assertEquals($expected, $result);
+       }
+
        function testCallRegister() {
                $result = strlen(OC_Util::callRegister());
                $this->assertEquals(30, $result);