2012-11-23 4 views
6

Na przykład, chciałbym móc wpisać funkcję tak:Jak znaleźć aktualny czas w dowolnym mieście na świecie za pomocą PHP?

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

Jak taka funkcja jest możliwe?

Pamiętaj też, że pracuję na hostowanym serwerze, więc czas serwera może być dowolny.

Bonus głosów za najmniejszą możliwą funkcję.

+0

Będziesz potrzebował informacji o strefie czasowej bazy danych zawierające dla każdego miasta, który ma być sprawdzony, a następnie dokonać korekty strefy czasowej do bieżącego czasu serwera. –

+0

@RobertHarvey Mówiąc o bazach danych, czy może być wystarczająco mały, aby przechowywać go w tablicy? – think123

+2

[Ten jeden] (http://www.iana.org/time-zones) ma około 200 kilobajtów. –

Odpowiedz

2

Będziesz potrzebować bazy danych zawierającej informacje o strefach czasowych dla każdego miasta, którego dotyczy zapytanie, a następnie dostosuj strefę czasową do bieżącego czasu serwera.

Istnieje baza danych strefy czasowej located here. Wygląda na to, że jest wyposażony w kod C, który zrzuca informacje o strefie czasowej do pliku, który, miejmy nadzieję, może być importowany do tabeli bazy danych. Gdy już to zrobisz, powinieneś być w stanie uzyskać dostosowanie strefy czasowej dla dowolnego miasta na świecie, o każdej porze roku.

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

Spróbuj tego.

+1

Mówisz więc, że chcesz tymczasowo zmienić strefę czasową serwera, pobrać czas, a następnie cofnąć strefę czasową? Nie jestem pewien, czy to najlepszy pomysł; złamie każde inne oprogramowanie zależne od dokładnego czasu i odczytuje czas, gdy strefa czasowa jest zła. –

+1

Czy naprawdę spodziewasz się, że każda mała wioska jest znana przez php? – rekire

1

Sprawdź tę usługę, aby uzyskać strefę czasową miasta wraz z czasem lokalnym.

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

oto jest przykład (New York).

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

Należy zauważyć, że istnieją pewne ograniczenia dotyczące użytkowania:

  1. Nie musi zrobić więcej niż jeden wniosek na sekundę do tych serwisów internetowych.

  2. Musisz buforować wyniki, jeśli uważasz, że będziesz potrzebować wykonać inne identyczne żądanie w ciągu 24 godzin.

  3. Musisz usunąć wszystkie dane z pamięci podręcznej, kiedy już ich nie potrzebujesz, a w każdym razie po 14 dniach.

+0

cóż, w takim razie czy istnieje funkcja wyszukiwania szerokości i długości geograficznej miasta? Nie przeszukuję ich jeden po drugim. – think123

+0

@ think123 możesz użyć google api dla tego ... sprawdź ten adres URL http://maps.googleapis.com/maps/api/geocode/json?address=new%20york%20usa&sensor=false –

+0

@MohitMehta: Which google API do odczytu wartości ?? –

0

Funkcje daty i czasu działa zgodnie z serwera, więc trzeba ręcznie ustawić strefę czasową, zanim jakiekolwiek funkcje daty i czasu są nazywane. A ponieważ potrzebujesz funkcji, która pokaże czas w zależności od przekazanego argumentu, efektywnym sposobem będzie ustawienie strefy czasowej w zależności od przekazanego argumentu. Do tego potrzebna będzie baza danych lub prawdopodobnie szereg stref czasowych (tablica będzie zbyt duża z setkami indeksów) i odpowiednio do niej pasować.

Poniżej znajduje się krótki kod pseudo

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 
    } 
Powiązane problemy