2011-02-02 133 views
1

編輯:此功能確實在PHP中工作,它在CakePHP框架內並不適用於我,因爲我原本在發佈時沒有考慮到這一點。將格林尼治標準時間轉換爲當地時間

此函數採用字符串格式化日期/時間和本地時區(例如'America/New_York')。它應該將時間轉換回當地時區。目前,它不會改變。

我傳的那樣:「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)); 
} 


?> 
相關問題