2012-11-23 100 views
6

例如,我将能够键入一个函数,像这样:如何使用PHP查找世界上任何城市的当前时间?

echo findtimeinworld('<some way to format Sydney, Australia>'); // The current time in Sydney, Australia in a timestamp 

这样的功能将如何可能呢?

另外,请注意我在这里工作的托管服务器,所以服务器时间可能是任何东西。

可能的最小功能奖励投票。

+0

你将需要为每个城市,是要查询一个包含数据库时区信息,然后做出一个时区调整到当前的服务器时间。 –

+0

@RobertHarvey谈到数据库,它是否足够小,可以存储在数组中? – think123

+2

[This one](http://www.iana.org/time-zones)大约是200千字节。 –

回答

2

您将需要一个数据库,其中包含要查询的每个城市的时区信息,然后对当前服务器时间进行时区调整。

有一个时区数据库located here。它看起来像它带有一些C代码来将时区信息转储到一个文件,希望它可以导入到数据库表中。一旦你有了这些,你应该能够在一年中的任何时间为世界上任何一个城市进行时区调整。

0
date_default_timezone_set('Europe/London'); 
date_default_timezone_get(); 

试试这个。

+1

所以你说暂时改变服务器的时区,抢时间,然后改变时区?我不确定这是最好的主意,它会打破任何其他依赖准确时间的软件,并在时区出错时读取时间。 –

+1

你真的期望每个小村庄都被php知道吗? – rekire

1

检查此webservice这有助于实现与当地时间的城市时区。

http://www.earthtools.org/webservices.htm#timezone

这里是它的例子(纽约)。

http://www.earthtools.org/timezone-1.1/40.71417/-74.00639

注意,有一些使用限制:

  1. 你不能做出超过每秒一个请求这些web服务。

  2. 如果您认为需要在24小时内发出另一个相同请求,则必须缓存结果。

  3. 当您不再需要它时,并且无论如何在14天后,您都必须删除任何缓存的数据。

+0

那么,在那种情况下,是否有一个功能来查找城市的经纬度?我不是一个接一个地搜寻它们的。 – think123

+0

@ think123你可以使用谷歌API ...检查此网址http://maps.googleapis.com/maps/api/geocode/json?address=new%20york%20usa&sensor=false –

+0

@MohitMehta:哪个谷歌API读取值? –

0

的日期和时间函数根据服务器工作,所以你必须手动设置时区被称为任何日期和时间功能前。 由于您需要一个函数来根据传递的参数显示时间,所以有效的方法将根据传递的参数设置时区。 为此,您需要一个数据库或者可能需要一个时区(数组将会有数百个索引太大)并相应地匹配它们。

下面是一个短伪码

echo findtimeinworld('COUNTRY/CITY'); //findtimeinworld('Australia/Melbourne'); 

    function findtimeinworld($suppliedTZ){ 

     //Match $suppliedTZ with timezone database for complete match 
     //if match found 
     date_default_timezone_set('returned timezone'); 
     //else if match not found 
     //match for first part ex Australia and limit the result to 1 
     //if match found 
     date_default_timezone_set('first returned timezone'); 
     //else if match not found 
     date_default_timezone_set('your default timezone'); 

     //put date and time functions here 
    } 
相关问题