2011-02-02 3 views
1

Редактировать: Эта функция делает Работает на PHP, она не работает для меня в рамках CakePHP, который я не считаю актуальным при первоначальной публикации.Конвертировать GMT в местное время

Эта функция принимает строчную отформатированную дату/время и местный часовой пояс (например, «Америка/Нью-Йорк»). Он должен вернуть время, преобразованное в местный часовой пояс. В настоящее время он не меняется.

я прохожу его: «2011-01-16 4:57:00», «Америка/Триатлон», и я вернусь в то же время я прохожу в

function getLocalfromGMT($datetime_gmt, $local_timezone){ 
     $ts_gmt = strtotime($datetime_gmt.' GMT'); 
     $tz = getenv('TZ'); 
     // next two lines seem to do no conversion 
     putenv("TZ=$local_timezone"); 
     $ret = date('Y-m-j H:i:s',$ts_gmt); 
     putenv("TZ=$tz"); 
     return $ret; 
    } 

Я видел ссылки. к новым методам default_timezone_get/set. В настоящее время я не заинтересован в использовании этого метода, потому что я хотел бы, чтобы этот код работал со старыми версиями PHP.

ответ

2

Видимо, в CakePHP, если вы используете date_default_timezone_set() в файле конфигурации, который мы, среда TZ метод переменная установка не работает. Таким образом, новая версия, которая, кажется, работает отлично:

function __getTimezone(){ 
     if(function_exists('date_default_timezone_get')){ 
      return date_default_timezone_get(); 
     }else{ 
      return getenv('TZ'); 
     } 
    } 

    function __setTimezone($tz){ 
     if(function_exists('date_default_timezone_set')){ 
      date_default_timezone_set($tz); 
     }else{ 
      putenv('TZ='.$tz); 
     } 
    } 

    // pass datetime_utc in a standard format that strtotime() will accept 
    // pass local_timezone as a string like "America/New_York" 
    // Local time is returned in YYYY-MM-DD HH:MM:SS format 
    function getLocalfromUTC($datetime_utc, $local_timezone){ 
     $ts_utc = strtotime($datetime_utc.' GMT'); 
     $tz = $this->__getTimezone(); 
     $this->__setTimezone($local_timezone); 
     $ret = date('Y-m-j H:i:s',$ts_utc); 
     $this->__setTimezone($tz); 
     return $ret; 
    } 
0

как об этом

<?php 


     // I am using the convention (assumption) of "07/04/2004 14:45" 
     $processdate = "07/04/2004 14:45"; 


     // gmttolocal is a function 
     // i am passing it 2 parameters: 
     // 1)the date in the above format and 
     // 2)time difference as a number; -5 in our case (GMT to CDT) 
     echo gmttolocal($processdate,-5); 



function gmttolocal($mydate,$mydifference) 
{ 
     // trying to seperate date and time 
     $datetime = explode(" ",$mydate); 

     // trying to seperate different elements in a date 
     $dateexplode = explode("/",$datetime[0]); 

     // trying to seperate different elements in time 
     $timeexplode = explode(":",$datetime[1]); 


// getting the unix datetime stamp 
$unixdatetime = mktime($timeexplode[0]+$mydifference,$timeexplode[1],0,$dateexplode[0],$dateexplode[1],$dateexplode[2]); 

     // return the local date 
     return date("m/d/Y H:i",$unixdatetime)); 
} 


?> 
Смежные вопросы