2011-10-08 10 views
16

Facebook, myspace, MSN, craigslist; tutti rilevano il fuso orario e mostrano correttamente gli orari e le date senza mai inviare un modulo o ricaricare una pagina.In che modo i principali siti individuano il fuso orario?

Come fanno? Ho un sito abbastanza grande e ho persone che pubblicano articoli che hanno bisogno di visualizzare gli orari corretti (caricate alle 15 o alle 18 in base al fuso orario).

Preloaders? Javascript? Caricando la pagina e ricaricandola? Il mio sito ha attualmente la persona che accede al sito e al primo accesso ricarica la pagina con le informazioni aggiornate del proprio fuso orario tramite javascript. Questa è comunque una cosa piuttosto fastidiosa e sto cercando un'alternativa. So che al momento del caricamento posso inviare una richiesta Ajax e poi farlo aggiornare tutto il sito con il fuso orario corretto per l'utente, MA se devo fare clic su di nuovo, o ricaricare chiede se mi piacerebbe inviare di nuovo l'informazione che è anche cattivo Quindi come fanno?

Stavo giocando con Facebook, cambiando la mia posizione sulla mia macchina locale e sembrava aggiornare il fuso orario ogni 5 minuti circa.

Sono php, basato su zend-framework.

+0

vedere la mia risposta, è un po 'più accurata. :) – pckabeer

risposta

16

non v'è alcuna richiesta di intestazione "fuso orario", o qualcosa di simile, quindi, non è possibile con PHP

ma con javascript voi può ottenere l'offset del fuso orario del client, quindi è possibile effettuare una richiesta xmlhttp per inviare informazioni a php

vedere questo: http://www.pageloom.com/automatic-timezone-detection-with-javascript

abbastanza facile!

speranza che questo aiuta

+1

@AdamSack i siti principali rilevano i fusi orari dalle informazioni degli utenti registrati, hanno il proprio database geoip.in più Darius ha detto che cambiando il tempo sul suo computer, il cambiamento viene rilevato, quindi usano sicuramente javascript. –

+0

Sono d'accordo con @AdamSack ancora +1 per il Javascript;) –

+1

L'offset del fuso orario non è costante, cambia con l'ora legale, quindi può essere ambiguo il fuso orario utilizzato da un client. Una combinazione di IP, offset del fuso orario di js e localizzazione di js dovrebbe fornire risultati migliori (è necessario un database che combini tutto ciò in qualche modo). –

4

È possibile trovare il paese dell'utente using IP address geocoding e quindi disporre di un array con fusi orari per ciascun paese. Penso che non ci siano altri modi. È possibile recuperare il paese utente in questo modo:

<?php 
$file = file_get_contents("http://api.hostip.info/get_html.php?ip=".$_SERVER['REMOTE_ADDR'].""); 
?> 

poi basta usare explode per il $file.

Vedi anche questi codici StackOverflow:
How can I determine a web user's time zone?
Any Reliable API available to determine User's city and country from IP address

3

Credo che usano l'indirizzamento IP e Geo-localizzazione. Questo è tutto ciò che c'è da fare.

+0

no, la richiesta js ajax è anche una buona opzione –

1

Prova questo codice php questo dà una migliore precisione

<?php $ip = $_SERVER['REMOTE_ADDR']; 
    $json = file_get_contents("http://api.easyjquery.com/ips/?ip=".$ip."&full=true"); 
    $json = json_decode($json,true); 
    $timezone = $json[localTimeZone];?> 
+0

Perché un voto basso fa capolino? Vedo due inconvenienti: l'uso dell'IP può fornire il fuso orario errato se i server del provider si trovano in un altro fuso orario e l'uso di un sito esterno non va bene poiché non vogliamo essere dipendenti. Grazie per l'input però – Darius

+0

non ho fatto un downvote ma penso che i due motivi che hai elencato siano ragionevolmente convincenti per non usarlo – sricks

1

jsTimezoneDetect fornisce una grande biblioteca per la rilevazione automatica di fuso orario tramite JavaScript.