2012-11-23 32 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 
    } 
相關問題