按时区计算php当前时间

时间:2017-09-19 05:45:46

标签: php

背景

我正在更新一个非常古老的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小时,我该怎么做才能修复它?

3 个答案:

答案 0 :(得分:1)

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";}

检查上面的代码我已经减去3600这样它显示1小时后请检查它是否有效

答案 1 :(得分:0)

你可以使用这个功能

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

答案 2 :(得分:0)

您可以使用此代码:

$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');