【问题标题】:How to get time zone in php by passing country code or country name如何通过传递国家代码或国家名称在 php 中获取时区
【发布时间】:2015-08-11 13:19:47
【问题描述】:

我有使用一些api的国家代码和国家名称,有没有办法在php中获取给定国家代码和国家名称的时区。我有这样的数据,

address:Object
city:"-"
continent:"Asia"
continent_code:"AS"
country:"India"
country_code:"IN"

我正在获取这些数据,我想获取给定地址的时区,有没有办法在 php 中做。

提前致谢

【问题讨论】:

  • 你可以自己创建一个查找表;但是在像澳大利亚或美国这样跨越多个时区的情况下,你会怎么做?最好使用正确的标识符

标签: php


【解决方案1】:

如果您不想安装 PECL 库。

您可以使用 DateTimeZone:

$timezone = \DateTimeZone::listIdentifiers(\DateTimeZone::PER_COUNTRY, $countryCode);

【讨论】:

  • 我越来越喜欢Array ( [0] => America/Adak [1] => America/Anchorage [2] => America/Boise [3] => America/Chicago [4] =>美国/丹佛 [5] => 美国/底特律 [6] => 美国/印第安纳/印第安纳波利斯 [7] => 美国/印第安纳/诺克斯 [8] => 美国/印第安纳/马伦戈 [9] => 美国/印第安纳/圣彼得堡 [10] => America/Indiana/Tell_City [11] => America/Indiana/Vevay [12] => America/Indiana/Vincennes [13] => America/Indiana/Winamac [14] => America/Juneau [ 15] => America/Kentucky/Louisville [16] => America/Kentucky/Monticello [17] => .... 使用您的解决方案使用美国国家代码时
  • @SayedMohdAli 使用国家 iso2
【解决方案2】:

PHP 有一个使用 GeoIP 的函数。

geoip_time_zone_by_country_and_region() 函数将返回与国家和地区代码组合对应的时区。

$timezone = geoip_time_zone_by_country_and_region('CA', 'QC');
if ($timezone) {
    echo 'Time zone for CA/QC is: ' . $timezone;
}

http://php.net/manual/en/function.geoip-time-zone-by-country-and-region.php

您需要下载并包含 GeoIP 库 http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

【讨论】:

  • 我尝试了您的代码,但出现错误调用未定义函数 geoip_time_zone_by_country_and_region() in
  • 您需要在您的站点中包含 GeoIP。 http://dev.maxmind.com/geoip/legacy/geolite/我已经更新了我的答案以包含链接
【解决方案3】:

如果您只有国家/地区名称信息,您可能无法反向查找所有时区。

例如,美国有 5 个不同的时区。这是一对多的关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多