如何在PHP中将日期时间转换为用户时区

时间:2015-07-31 05:46:59

标签: php

我在UTC + 0时区输入的日期时间为

$curDate = date("Y-m-d");
$curTime = date("g:i a");

我想要的是,检测访问用户的时区。

之后,将日期和时间转换为他/她的时区,并在他们的时区显示日期时间。

4 个答案:

答案 0 :(得分:1)

您可以使用http://ipinfodb.com/来检测用户本地化,从而检测用户时区,例如:

function geoLocalization($ip, $api_key)
{
  $params = @file_get_contents("http://api.ipinfodb.com/v2/ip_query.php?key=".$api_key."&ip=".$ip."&timezone=true");
  $fields = @new SimpleXMLElement($params);
  foreach($fields as $field => $val) {
      $result[(string)$field] = (string)$val;
  }
  return $result;
}

当您获得用户本地化时,您可以使用date_default_timezone_set来设置时区。 最好让您的用户覆盖此内容。

您可以在此网站上找到所有时区: http://php.net/manual/en/timezones.php

答案 1 :(得分:1)

对于php +5.3,您可以使用DateTime::createFromFormat。但对于以前版本的php,您应该使用<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> </dependency> 。这是一个例子:

strtotime()

答案 2 :(得分:1)

$ utc_date = DateTime :: createFromFormat(     &#39; Y-m-d G:我&#39;,     &#39; 2011-04-27 02:45&#39;,     新的DateTimeZone(&#39; UTC&#39;) );

$ acst_date = clone $ utc_date; //这里我们不想要PHP的默认传递对象 $ acst_date-&gt; setTimeZone(new DateTimeZone(&#39; Australia / Yancowinna&#39;));

回声&#39; UTC:&#39; 。 $ utc_date-&gt;格式(&#39; Y-m-d g:i A&#39;); // UTC:2011-04-27 2:45 AM echo&#39; ACST:&#39; 。 $ acst_date-&gt;格式(&#39; Y-m-d g:i A&#39;); // ACST:2011-04-27 12:15 PM

答案 3 :(得分:0)

要么强迫用户为您提供时区作为第一件事。

或者

获取请求的IPAddr,然后是地理位置,然后是tmezone。

第二个选项取决于第三方库和第三方服务器。