Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按时区计算php当前时间_Php - Fatal编程技术网

按时区计算php当前时间

按时区计算php当前时间,php,Php,背景 我正在对一个非常旧的PHP应用程序进行一些更新。在应用程序中,由于使用了折旧函数mktime(),因此引发了一个错误。我用time()在整个应用程序中更新了这个函数。一旦我这样做了,我注意到当显示一个用户的本地时间(由他们的邮政编码计算)时,它比实际的本地时间晚了一个小时 我已经跟踪时间计算到下面的一个函数。时间被传递到,$client[“localtime”] 示例代码 if (isset($time) && $time) { $utc_str = gmdate(

背景

我正在对一个非常旧的PHP应用程序进行一些更新。在应用程序中,由于使用了折旧函数
mktime()
,因此引发了一个错误。我用
time()
在整个应用程序中更新了这个函数。一旦我这样做了,我注意到当显示一个用户的本地时间(由他们的邮政编码计算)时,它比实际的本地时间晚了一个小时

我已经跟踪时间计算到下面的一个函数。时间被传递到,
$client[“localtime”]

示例代码

if (isset($time) && $time) {
    $utc_str = gmdate("M d Y H:i:s", time());
    $utc = strtotime($utc_str);
    if (isset($tznames[ $time["timezone"] ])) {
        $client["timezone"] = $tznames[ $time["timezone"] ];
    } else {
        $client["timezone"] = "Unknown";
    }
    if ($time["daylightsavings"] == "Y" && date("I")) {
        $time["timezone"]--;
    }
    $client["localtime"] = date("g:ia", $utc - ($time["timezone"] * 3600));
} else {
    $client["localtime"] = "Unknown";
    $client["timezone"] = "Unknown";
}
问题


为什么这会显示客户端时区的本地时间落后1小时,我必须做些什么来修复它

您可以使用此功能

function convertTimeByTimezone($datetime,$timezone='Asia/Kolkata') {
        $given = new DateTime($datetime, new DateTimeZone("UTC"));
        $given->setTimezone(new DateTimeZone($timezone));
        $output = $given->format("Y-m-d H:i:s"); 
        return $output;
}
您可以使用以下代码:

$date = new DateTime("now", new DateTimeZone('Australia/Adelaide'));
echo 'Australia/Adelaide: '.$date->format('Y-m-d H:i:s');

$date1 = new DateTime("now", new DateTimeZone('America/Chicago'));
echo 'America/Chicago: '. $date1->format('Y-m-d H:i:s');

检查我从中减去3600的上述代码,使其显示延迟1小时。请检查它是否能工作

我必须理解为什么从mktime(0更改为time()时此函数不能工作然后修复它。谢谢你。我知道我可以写一个新函数,但这一点是为了理解更改,这样我就可以对应用程序中的代码进行最小的更改,以保持其全局工作,并理解当折旧函数更新时会出现的问题。这里的“时区”是什么意思?看起来像“时区”实际上是一个数字UTC偏移量?
if (isset($time) && $time) { 
    $utc_str = gmdate("M d Y H:i:s", time());
    $utc = strtotime($utc_str);
    if (isset($tznames[$time["timezone"]])) { $client["timezone"] = $tznames[$time["timezone"]]; } 
    else { $client["timezone"] = "Unknown"; }
    if ($time["daylightsavings"] == "Y" && date("I")) { $time["timezone"]--; }



   // print_r(($time["timezone"] * 3600).",".$client["timezone"].",".$time["timezone"].",".$utc_str.",".$utc);
       $client["localtime"] = date("g:ia", $utc - ($time["timezone"] * 3600 - 3600));
} else { $client["localtime"] = "Unknown";
$client["timezone"] = "Unknown";}