- Fix format_date() when $convert=false (#1488147)

pull/1/head
alecpl 12 years ago
parent 19fccd8b22
commit 8e8ae79cd0

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

Loading…
Cancel
Save