Конвертировать GMT в Местное время - PullRequest
1 голос
/ 02 февраля 2011

Edit: эта функция работает в 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 ]

2 голосов
/ 02 февраля 2011

Очевидно, что в 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 голосов
/ 02 февраля 2011

как насчет этого

<?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));
}


?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...