summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2014-09-22 15:03:28 +0200
committerThomas Müller <thomas.mueller@tmit.eu>2014-09-22 15:03:28 +0200
commit814114ab8eda5d383f4c620f3854cfefcdb6895d (patch)
treee80442b93a34f22fa85cc6fbedd233954cd6f889
parentf4eae03f20674423cbe9034fdbeb30125157e6fc (diff)
downloadnextcloud-server-814114ab8eda5d383f4c620f3854cfefcdb6895d.tar.gz
nextcloud-server-814114ab8eda5d383f4c620f3854cfefcdb6895d.zip
enhance formatDate function to accept an optional argument containing the time zone
-rwxr-xr-xlib/private/util.php24
-rw-r--r--lib/public/util.php6
-rw-r--r--tests/lib/util.php24
3 files changed, 45 insertions, 9 deletions
diff --git a/lib/private/util.php b/lib/private/util.php
index c5483c1654b..4d1287bcc85 100755
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -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);
diff --git a/lib/public/util.php b/lib/public/util.php
index 244c11ba2cc..35847fce38a 100644
--- a/lib/public/util.php
+++ b/lib/public/util.php
@@ -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));
}
/**
diff --git a/tests/lib/util.php b/tests/lib/util.php
index 8964f9f2666..e43b6309eae 100644
--- a/tests/lib/util.php
+++ b/tests/lib/util.php
@@ -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);