From 09c58d1adde92a60a3e7cd67f4e66c8b1a56be6a Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <bruederli@kolabsys.com>
Date: Sun, 28 Dec 2014 09:41:47 -0500
Subject: [PATCH] Make rcube_utils::strtotime() timezone aware (#1490163)

---
 tests/Framework/Utils.php |   25 ++++++++++++++++++++++++-
 1 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php
index 10c90fb..1cd9e74 100644
--- a/tests/Framework/Utils.php
+++ b/tests/Framework/Utils.php
@@ -278,6 +278,7 @@
         $test = array(
             '1' => 1,
             '' => 0,
+            'abc-555' => 0,
             '2013-04-22' => 1366581600,
             '2013/04/22' => 1366581600,
             '2013.04.22' => 1366581600,
@@ -286,6 +287,8 @@
             '22.04.2013' => 1366581600,
             '22.4.2013'  => 1366581600,
             '20130422'   => 1366581600,
+            '2013/06/21 12:00:00 UTC' => 1371816000,
+            '2013/06/21 12:00:00 Europe/Berlin' => 1371808800,
         );
 
         foreach ($test as $datetime => $ts) {
@@ -316,7 +319,27 @@
 
         foreach ($test as $datetime => $ts) {
             $result = rcube_utils::anytodatetime($datetime);
-            $this->assertSame($ts, $result ? $result->format('Y-m-d') : '', "Error parsing date: $datetime");
+            $this->assertSame($ts, $result ? $result->format('Y-m-d') : false, "Error parsing date: $datetime");
+        }
+    }
+
+    /**
+     * rcube:utils::anytodatetime()
+     */
+    function test_anytodatetime_timezone()
+    {
+        $tz = new DateTimeZone('Europe/Helsinki');
+        $test = array(
+            'Jan 1st 2014 +0800' => '2013-12-31 18:00',  // result in target timezone
+            'Jan 1st 14 45:42'   => '2014-01-01 00:00',  // force fallback to rcube_utils::strtotime()
+            'Jan 1st 2014 UK'    => '2014-01-01 00:00',
+            'Invalid date'       => false,
+        );
+
+        foreach ($test as $datetime => $ts) {
+            $result = rcube_utils::anytodatetime($datetime, $tz);
+            if ($result) $result->setTimezone($tz);  // move to target timezone for comparison
+            $this->assertSame($ts, $result ? $result->format('Y-m-d H:i') : false, "Error parsing date: $datetime");
         }
     }
 

--
Gitblit v1.9.1