PHP 5.2.17:将当地时间转换为GMT和GMT到当地时间

时间:2012-09-10 07:17:53

标签: php

在我的申请中,我只想将当地时间转换为GMT和GMT到当地时间。我有以下两种方法可以做到这一点。

function GmtTimeToLocalTime($date) {
    $gmt_time = date("Y-m-d H:i:s", $date);
    date_default_timezone_set("UTC");
    $timestamp_in_gmt = strtotime($gmt_time);
    date_default_timezone_set('Asia/Calcutta');
    $local_time = date("Y-m-d H:i:s", $timestamp_in_gmt);
    //date_default_timezone_set("UTC");
    return $local_time;
}

function LocalTimeToGmtTime($date) {
    $local_time = date("Y-m-d H:i:s", $date);
    date_default_timezone_set('Asia/Calcutta');
    $timestamp_in_localtime = strtotime($local_time);
    date_default_timezone_set("UTC");
    $gmt_time = date("Y-m-d H:i:s", $timestamp_in_localtime);
    //date_default_timezone_set('Asia/Calcutta');
    return $gmt_time;
}

但我得到了所有输入的日期1970-01-01。

请提供正确的方法。 提前致谢

3 个答案:

答案 0 :(得分:3)

也许如果你尝试使用DateTime对象,你会得到更好的结果:

<?php
 function GmtTimeToLocalTime($time) {
    $date =  new DateTime(date('Y-m-d h:i:s',$time),new DateTimezone('UTC'));
    $date->setTimezone(new \DateTimezone('Asia/Calcutta'));
    return $date->format("Y-m-d H:i:s");
 }

答案 1 :(得分:2)

快捷方式应该是查看DateTime并使用DateTime::setTimezone修改从GMT到当地时间的时区,反之亦然。

编辑:当然,您可以使用DateTime::setTimestampDateTime::createFromFormat将此DateTime填入您的时间戳。

答案 2 :(得分:0)

在以下函数中传递latlong以获取时区。

function getTimezoneGeo($latForGeo, $lngForGeo) {
        $json = file_get_contents("http://api.geonames.org/timezoneJSON?lat=".$latForGeo."&lng=".$lngForGeo."&username=demo");
        $data = json_decode($json);
        $tzone=$data->timezoneId;
        return $tzone;
    }