diff --git a/include/class.misc.php b/include/class.misc.php
index d8f2523045c2628f0fe796ace96ed44e761549ae..b897f5b2f4cbb608d4c34657ed3fa9ade3efd3ca 100644
--- a/include/class.misc.php
+++ b/include/class.misc.php
@@ -86,23 +86,15 @@ class Misc {
 
         $tz = new DateTimeZone($cfg->getTimezone($user));
 
-        if (!$timestamp)
-            $timestamp = 'now';
-
-        if (is_int($timestamp)) {
-            $time = $timestamp;
-        } else {
-            if (!($date = new DateTime($timestamp, $tz))) {
-                // Timestamp might be invalid
+        if ($timestamp && is_int($timestamp)) {
+            if (!($date = DateTime::createFromFormat('U', $timestamp)))
                 return $timestamp;
-            }
-            $time = $date->format('U');
-        }
 
-        if (!($D = DateTime::createFromFormat('U', $time)))
-            return $time;
+            return $timestamp - $tz->getOffset($date);
+        }
 
-        return $time - $tz->getOffset($D);
+        $date = new DateTime($timestamp ?: 'now', $tz);
+        return $date ? $date->getTimestamp() : $timestamp;
     }
 
     //Take user time or gmtime and return db (mysql) time.
@@ -131,10 +123,14 @@ class Misc {
         global $cfg;
 
         $tz = new DateTimeZone($user ? $cfg->getDbTimezone($user) : 'UTC');
-        if (!($time = new DateTime($time ?: 'now'))) {
+
+       if ($time && is_numeric($time))
+          $time = DateTime::createFromFormat('U', $time);
+        elseif (!($time = new DateTime($time ?: 'now'))) {
             // Old standard
             return time() - date('Z');
         }
+
         return $time->getTimestamp() - $tz->getOffset($time);
     }