2011-01-20 32 views

risposta

48

questo modo si ottiene il fuso orario come variabile PHP. Ho scritto una funzione utilizzando jQuery e PHP. Questo è testato, e funziona!

Nella pagina PHP in cui si desidera avere il fuso orario come una variabile, hanno questo frammento di codice da qualche parte vicino alla parte superiore della pagina:

<?php  
    session_start(); 
    $timezone = $_SESSION['time']; 
?> 

Questo leggerà la variabile di sessione "tempo", che stiamo ora creando.

Nella stessa pagina, nella sezione <head>, prima di tutto è necessario includere jQuery:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 

anche nella sezione <head> ,, incollare questo jQuery:

<script type="text/javascript"> 
    $(document).ready(function() { 
     if("<?php echo $timezone; ?>".length==0){ 
      var visitortime = new Date(); 
      var visitortimezone = "GMT " + -visitortime.getTimezoneOffset()/60; 
      $.ajax({ 
       type: "GET", 
       url: "http://domain.com/timezone.php", 
       data: 'time='+ visitortimezone, 
       success: function(){ 
        location.reload(); 
       } 
      }); 
     } 
    }); 
</script> 

Si può o potrebbe non averlo notato, ma è necessario modificare l'URL nel proprio dominio.

Un'ultima cosa. Probabilmente ti starai chiedendo cosa diavolo è il timezone.php. Beh, è ​​semplicemente questo: (creare un nuovo file chiamato timezone.php e scegliere con l'url sopra)

<?php 
    session_start(); 
    $_SESSION['time'] = $_GET['time']; 
?> 

Se questo funziona correttamente, in primo luogo caricare la pagina, eseguire il codice JavaScript e ricarica la pagina. Sarai quindi in grado di leggere la variabile $ timezone e usarla a tuo piacimento! Restituisce l'attuale fuso orario UTC/GMT (GMT -7) o qualsiasi fuso orario in cui ti trovi.

Si può leggere di più su questo sul mio blog

Acclamazioni

</Westy92>

+0

ho quasi rinunciato a questo! Grazie ! – andrei

+1

viene visualizzato un errore che dice $ timezone undefined. perché? – arboles

+6

Penso questa soluzione è fondamentalmente sbagliato (almeno in alcune situazioni), perché permette all'utente di cambiare il tempo, per quello che vuole, semplicemente semplicemente chiamando http://domain.com/timezone.php –

9

Proprio come Oded ha risposto. È necessario disporre di questo tipo di funzionalità di rilevamento in javascript.

ho lottato con questo me stesso e sono reso conto che l'offset non è sufficiente. Ad esempio, non ti fornisce alcuna informazione sull'ora legale. Ho finito per scrivere un codice per mappare le chiavi del database Zoneinfo.

Controllando diverse date in giro per un anno è possibile determinare con maggiore precisione un fuso orario.

provare lo script qui: http://jsfiddle.net/pellepim/CsNcf/

semplicemente cambiare il fuso orario del sistema e fare clic su Esegui per testarlo. Se si esegue Chrome è necessario fare ogni test in una nuova scheda anche se (e Safar deve essere riavviato per raccogliere le modifiche timezone).

Se volete maggiori dettagli del codice check out: https://bitbucket.org/pellepim/jstimezonedetect/

+0

Questo è probabilmente l'approccio più ragionevole. –

27

Sul lato server, sarà non accurato come con JavaScript. Nel frattempo, a volte è necessario per risolvere tale compito. Solo per condividere la possibile soluzione in questo caso scrivo questa risposta.

Se è necessario determinare il fuso orario dell'utente, è possibile farlo tramite i servizi Geo-IP. Alcuni di loro forniscono il fuso orario. Ad esempio, questo (http://smart-ip.net/geoip-api) potrebbe aiutare:

<?php 
$ip  = $_SERVER['REMOTE_ADDR']; // means we got user's IP address 
$json = file_get_contents('http://smart-ip.net/geoip-json/' . $ip); // this one service we gonna use to obtain timezone by IP 
// maybe it's good to add some checks (if/else you've got an answer and if json could be decoded, etc.) 
$ipData = json_decode($json, true); 

if ($ipData['timezone']) { 
    $tz = new DateTimeZone($ipData['timezone']); 
    $now = new DateTime('now', $tz); // DateTime object corellated to user's timezone 
} else { 
    // we can't determine a timezone - do something else... 
} 
+1

http://smart-ip.net/ non è accessibile ora. Quindi questa soluzione è vaga. Penso che abbiano spento il loro server. Quindi, utilizzare questo codice a proprio rischio perché il risultato restituito da questo è nullo. –

+2

(-1) http://smart-ip.net/geoip-json/202.191.214.178 - Servizio temporaneamente non disponibile – Chinmay235

+3

Si può provare questo sito ora: http://ip-api.com/json/. –