在我的申请中,我只想将当地时间转换为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。
请提供正确的方法。 提前致谢
答案 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::setTimestamp
或DateTime::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;
}