如何按国家/地区名称查找GMT日期/时间?

时间:2010-08-14 13:32:48

标签: php datetime localization

如何查找国家/地区名称 - >我可以做的GMT日期/时间如下:

示例:

$datetime = new GMT_search('America');  //output: 2010-01-01 00:00:00    
$datetime = new GMT_search('India');  //output: 2010-01-01 ??:??:??    
$datetime = new GMT_search('China');  //output: 2010-01-01 ??:??:??

我尝试了gmdate()date_default_timezone_set('Asia/....');ini_set('date.timezone','China');,但这并不能帮助我轻松找到GMT日期/时间的国家名称。

有谁可以请给我一个PHP示例,它真的有效吗?

谢谢

4 个答案:

答案 0 :(得分:35)

您可以按国家/地区DateTimeZone::listIdentifiers搜索时区。

示例,获取葡萄牙的时区:

print_r(DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, "PT"));

给出:

Array
(
    [0] => Atlantic/Azores
    [1] => Atlantic/Madeira
    [2] => Europe/Lisbon
)

然后你可以这样做:

$d = new DateTime("now", new DateTimeZone("Atlantic/Azores"));
echo $d->format(DateTime::W3C); //2010-08-14T15:22:22+00:00

正如在这个帖子中一遍又一遍地重复一样,你不能为每个国家获得一个时区。国家/地区有几个时区,您会注意到即使this page也没有为美国等一些国家/地区任意选择一个。

答案 1 :(得分:3)

不确定这是否是您要查找的内容,但PEAR有一个“Date”可用包,其中有一个很好的示例,似乎可以满足您的要求。

http://pear.php.net/manual/en/package.datetime.date.examples.php(向下滚动到“转换时区”)

答案 2 :(得分:3)

Here您将找到PHP支持的完整时区列表,这些时区可用于例如: date_default_timezone_set()。对具有多个时区的国家/地区的支持也很方便查找。拿example of the American region

<?php
date_default_timezone_set('America/New_York');
echo date('D,F j, Y, h:i:s A');
?>

该列表是PHP支持的完整时区,用于例如date_default_timezone_set()。

答案 3 :(得分:2)

你不能这样做,因为很多国家都有多个时区。您可以使用城市名称存储时区,但我会使用一个整数,其时区偏移量以秒为单位。

您可以通过此功能获取洲/城市的时区列表: www.php.net/manual/en/function.timezone-identifiers-list.php

您可以从此功能获得相应的偏移量: www.php.net/manual/en/datetimezone.getoffset.php

如果您有一个有效的偏移量,您可以使用gmdate()而不是date()来获取格式的日期而不调整时区/ dst。只需传递时间()+您存储的调整: www.php.net/manual/en/function.gmdate.php

很抱歉没有张贴链接,但我没有足够的业力。