Eventuali duplicati:
How can I determine a web user's time zone?ottenere fuso orario dell'utente
Qual è il modo migliore per farlo? php o javascript. Qualcuno mi fornisce alcuni frammenti? Grazie.
Eventuali duplicati:
How can I determine a web user's time zone?ottenere fuso orario dell'utente
Qual è il modo migliore per farlo? php o javascript. Qualcuno mi fornisce alcuni frammenti? Grazie.
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>
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/
Questo è probabilmente l'approccio più ragionevole. –
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...
}
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. –
(-1) http://smart-ip.net/geoip-json/202.191.214.178 - Servizio temporaneamente non disponibile – Chinmay235
Si può provare questo sito ora: http://ip-api.com/json/. –
ho quasi rinunciato a questo! Grazie ! – andrei
viene visualizzato un errore che dice $ timezone undefined. perché? – arboles
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 –