将GMT转换为当地时间

时间:2011-02-02 19:06:48

标签: php cakephp time

编辑:这个函数 在PHP中工作,它在CakePHP框架中对我不起作用,我在最初发布时认为没有相关性。

此函数采用字符串格式化日期/时间和本地时区(例如“America / New_York”)。它应该返回转换为当地时区的时间。目前,它没有改变。

我通过了:'2011-01-16 04:57:00','America / New_York',我回来的同时也回来了。

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 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分: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));
}


?>