From 8e8ae79cd0fbe30e8ca4e917d94166efb4336f2e Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sat, 07 Apr 2012 12:28:52 -0400
Subject: [PATCH] - Fix format_date() when $convert=false (#1488147)

---
 program/include/main.inc |   57 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 51a65b5..3489928 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -735,38 +735,36 @@
 {
   global $RCMAIL, $CONFIG;
 
-  if (is_a($date, 'DateTime')) {
-    $ts = $date->format('U');
-    $tzs = $date->getTimezone();
+  if (is_object($date) && is_a($date, 'DateTime')) {
+    $timestamp = $date->format('U');
   }
   else {
-    $tzs = 'GMT';
-
     if (!empty($date))
-      $ts = rcube_strtotime($date);
+      $timestamp = rcube_strtotime($date);
 
-    if (empty($ts))
+    if (empty($timestamp))
       return '';
 
     try {
-      $date = new DateTime("@".$ts);
+      $date = new DateTime("@".$timestamp);
     }
     catch (Exception $e) {
       return '';
     }
   }
 
-  try {
-    // convert to the right timezone
-    $stz = date_default_timezone_get();
-    $tz = new DateTimeZone($convert ? $RCMAIL->config->get('timezone') : $tzs);
-    $date->setTimezone($tz);
-    date_default_timezone_set($tz->getName());
+  if ($convert) {
+    try {
+      // convert to the right timezone
+      $stz = date_default_timezone_get();
+      $tz = new DateTimeZone($RCMAIL->config->get('timezone'));
+      $date->setTimezone($tz);
+      date_default_timezone_set($tz->getName());
 
-    $timestamp = $date->format('U');
-  }
-  catch (Exception $e) {
-    $timestamp = $ts;
+      $timestamp = $date->format('U');
+    }
+    catch (Exception $e) {
+    }
   }
 
   // define date format depending on current time
@@ -789,14 +787,18 @@
   // strftime() format
   if (preg_match('/%[a-z]+/i', $format)) {
     $format = strftime($format, $timestamp);
-    date_default_timezone_set($stz);
+
+    if ($convert && $stz) {
+      date_default_timezone_set($stz);
+    }
+
     return $today ? (rcube_label('today') . ' ' . $format) : $format;
   }
 
   // parse format string manually in order to provide localized weekday and month names
   // an alternative would be to convert the date() format string to fit with strftime()
   $out = '';
-  for($i=0; $i<strlen($format); $i++) {
+  for ($i=0; $i<strlen($format); $i++) {
     if ($format[$i]=='\\')  // skip escape chars
       continue;
 
@@ -805,20 +807,20 @@
       $out .= $format[$i];
     // weekday (short)
     else if ($format[$i]=='D')
-      $out .= rcube_label(strtolower($date->format('D')));
+      $out .= rcube_label(strtolower(date('D', $timestamp)));
     // weekday long
     else if ($format[$i]=='l')
-      $out .= rcube_label(strtolower($date->format('l')));
+      $out .= rcube_label(strtolower(date('l', $timestamp)));
     // month name (short)
     else if ($format[$i]=='M')
-      $out .= rcube_label(strtolower($date->format('M')));
+      $out .= rcube_label(strtolower(date('M', $timestamp)));
     // month name (long)
     else if ($format[$i]=='F')
-      $out .= rcube_label('long'.strtolower($date->format('M')));
+      $out .= rcube_label('long'.strtolower(date('M', $timestamp)));
     else if ($format[$i]=='x')
       $out .= strftime('%x %X', $timestamp);
     else
-      $out .= $date->format($format[$i]);
+      $out .= date($format[$i], $timestamp);
   }
 
   if ($today) {
@@ -832,7 +834,10 @@
     }
   }
 
-  date_default_timezone_set($stz);
+  if ($convert && $stz) {
+    date_default_timezone_set($stz);
+  }
+
   return $out;
 }
 

--
Gitblit v1.9.1