Ignore:
Timestamp:
Jan 4, 2012 7:47:50 AM (17 months ago)
Author:
thomasb
Message:

Use proper timezones from PHP's internal timezonedb (#1485592)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/program/include/main.inc

    r5650 r5707  
    10631063    return ''; 
    10641064 
    1065   if ($convert) { 
    1066     // get user's timezone offset 
    1067     $tz = $RCMAIL->config->get_timezone(); 
    1068  
    1069     // convert time to user's timezone 
    1070     $timestamp = $ts - date('Z', $ts) + ($tz * 3600); 
    1071  
    1072     // get current timestamp in user's timezone 
    1073     $now = time();  // local time 
    1074     $now -= (int)date('Z'); // make GMT time 
    1075     $now += ($tz * 3600); // user's time 
    1076   } 
    1077   else { 
    1078     $now       = time(); 
    1079     $timestamp = $ts; 
    1080   } 
     1065  $date = new DateTime; 
     1066  $date->setTimestamp($ts); 
     1067 
     1068  // convert to the right timezone 
     1069  $stz = date_default_timezone_get(); 
     1070  $tz = new DateTimeZone($convert ? $RCMAIL->config->get('timezone') : 'GMT'); 
     1071  date_default_timezone_set($tz->getName()); 
     1072  $date->setTimezone($tz); 
     1073 
     1074  $timestamp = $date->getTimestamp(); 
    10811075 
    10821076  // define date format depending on current time 
     
    10991093  if (preg_match('/%[a-z]+/i', $format)) { 
    11001094    $format = strftime($format, $timestamp); 
     1095    date_default_timezone_set($stz); 
    11011096    return $today ? (rcube_label('today') . ' ' . $format) : $format; 
    11021097  } 
     
    11141109    // weekday (short) 
    11151110    else if ($format[$i]=='D') 
    1116       $out .= rcube_label(strtolower(date('D', $timestamp))); 
     1111      $out .= rcube_label(strtolower($date->format('D'))); 
    11171112    // weekday long 
    11181113    else if ($format[$i]=='l') 
    1119       $out .= rcube_label(strtolower(date('l', $timestamp))); 
     1114      $out .= rcube_label(strtolower($date->format('l'))); 
    11201115    // month name (short) 
    11211116    else if ($format[$i]=='M') 
    1122       $out .= rcube_label(strtolower(date('M', $timestamp))); 
     1117      $out .= rcube_label(strtolower($date->format('M'))); 
    11231118    // month name (long) 
    11241119    else if ($format[$i]=='F') 
    1125       $out .= rcube_label('long'.strtolower(date('M', $timestamp))); 
     1120      $out .= rcube_label('long'.strtolower($date->format('M'))); 
    11261121    else if ($format[$i]=='x') 
    11271122      $out .= strftime('%x %X', $timestamp); 
    11281123    else 
    1129       $out .= date($format[$i], $timestamp); 
     1124      $out .= $date->format($format[$i]); 
    11301125  } 
    11311126 
     
    11411136  } 
    11421137 
     1138  date_default_timezone_set($stz); 
    11431139  return $out; 
    11441140} 
     
    18791875function rcmail_user_date() 
    18801876{ 
    1881   global $RCMAIL, $CONFIG; 
     1877  global $RCMAIL; 
    18821878 
    18831879  // get user's timezone 
    1884   $tz = $RCMAIL->config->get_timezone(); 
    1885  
    1886   $date = time() + $tz * 60 * 60; 
    1887   $date = gmdate('r', $date); 
    1888   $tz   = sprintf('%+05d', intval($tz) * 100 + ($tz - intval($tz)) * 60); 
    1889   $date = preg_replace('/[+-][0-9]{4}$/', $tz, $date); 
    1890  
    1891   return $date; 
     1880  $tz = new DateTimeZone($RCMAIL->config->get('timezone')); 
     1881 
     1882  $date = new DateTime('now', $tz); 
     1883  return $date->format('r'); 
    18921884} 
    18931885 
Note: See TracChangeset for help on using the changeset viewer.