Bestimmen Sie eine Zeitzone des Benutzers

stimmen
539

Gibt es eine Standardmethode für einen Web-Server in der Lage sein, ein Benutzerzeitzone innerhalb einer Webseite zu bestimmen?

Vielleicht von einem HTTP-Header oder einen Teil des User-Agent-String?

Veröffentlicht am 01/08/2008 um 00:42
quelle vom benutzer
In anderen Sprachen...                            


25 antworten

stimmen
302
-new Date().getTimezoneOffset()/60;

Das Verfahren getTimezoneOffset()wird Ihre Zeit von GMT und gibt die Anzahl der Minuten subtrahieren. Also , wenn Sie in GMT-8 leben, wird es 480 zurück.

Um dies in die Stunden, Division durch 60. Beachten Sie auch, dass das Zeichen ist das Gegenteil von dem, was Sie brauchen - es ist die Berechnung GMT ist aus Ihrer Zeitzone versetzt ist, nicht die Zeitzone von GMT-Offset ist. Um dies zu beheben, multiplizieren Sie einfach mit -1.

Beachten Sie auch , dass w3school sagt:

Der Rückgabewert ist keine Konstante, wegen der Praxis der Verwendung von Sommerzeit.

Beantwortet am 27/11/2009 um 18:52
quelle vom benutzer

stimmen
174

Die beliebtesten (== Standard?) Weg , um die Zeitzone zu bestimmen ich um gesehen habe , ist einfach zu fragen die Nutzer selbst. Wenn Ihre Website Abonnement erfordert, könnte dies in den Benutzerprofildaten gespeichert werden. Für Anon Benutzer, könnten die Daten als UTC oder GMT oder so angezeigt.

Ich versuche nicht, ein Klugscheißer zu sein. Es ist nur so, dass manchmal einige Probleme außerhalb jeder Programmierung Kontext feinere Lösungen haben.

Beantwortet am 03/08/2008 um 20:30
quelle vom benutzer

stimmen
77

Es gibt keine HTTP-Header, die Kunden Zeitzone berichten bisher, obwohl es wurde vorgeschlagen, sie in der HTTP-Spezifikation enthalten.

Wenn es nach mir, würde ich versuchen, wahrscheinlich die Zeitzone mit Clientside JavaScript zu holen und sie dann an den Server mit Ajax oder etwas einreichen.

Beantwortet am 01/08/2008 um 13:19
quelle vom benutzer

stimmen
47

Javascript ist der einfachste Weg des Kunden Ortszeit zu erhalten. Ich würde vorschlagen , eine mit XMLHttpRequestder lokalen Zeit zurück zu senden, und wenn das nicht funktioniert, fallen zurück auf die Zeitzone auf ihre IP - Adresse erfasst wird .

Soweit Geolocation habe ich verwendet MaxMind GeoIP an mehreren Projekten und es funktioniert gut, obwohl ich nicht sicher bin , ob sie Zeitzone Daten zur Verfügung stellen. Es ist ein Dienst , den Sie bezahlen , und sie bieten monatliche Updates zu Ihrer Datenbank. Sie bieten Wrapper in mehreren Web - Sprachen.

Beantwortet am 01/08/2008 um 16:11
quelle vom benutzer

stimmen
39

Hier ist eine robuste JavaScript-Lösung die Zeitzone der Browser in zu bestimmen ist.

>>> var timezone = jstz.determine();
>>> timezone.name(); 
"Europe/London"

https://bitbucket.org/pellepim/jstimezonedetect

Beantwortet am 06/08/2012 um 22:22
quelle vom benutzer

stimmen
34

Hier ist eine vollständigere Weise.

  1. Lassen Sie sich die Zeitzone für den Benutzer versetzt
  2. Testen Sie einige Tage auf DLS Grenzen zu bestimmen, ob sie in einer Zone, die DLS verwendet.

Außer Unten:

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;

    //go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

        //To ignore daylight saving time look for the lowest offset.
        //Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }

    return intOffset;
}

Erste TZ und DST von JS (via Way Back Machine)

Beantwortet am 30/03/2011 um 21:48
quelle vom benutzer

stimmen
26

Mit Unkwntech Ansatz, schrieb ich eine Funktion mit jQuery und PHP. Dies wird getestet und funktioniert!

Auf der PHP-Seite, wo Sie die Zeitzone als Variable haben werden wollen, müssen Sie diesen Code-Snippet irgendwo in der Nähe der oben auf der Seite:

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

Dies wird das Session-Variable „Zeit“ gelesen, die wir jetzt im Begriff sind, zu schaffen.

Auf der gleichen Seite, in der, müssen Sie zunächst einmal schließen jQuery:

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

Auch in der unterhalb der jQuery, fügen Sie diese:

<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>

Sie können oder nicht bemerkt haben, aber Sie müssen die URL zu Ihrem tatsächlichen Domain ändern.

Eine letzte Sache. Sie befinden sich wahrscheinlich fragen , was zum Teufel timezone.php ist. Nun, es ist einfach so: (erstellen Sie eine neue Datei mit dem Namen timezone.php und Stelle , um es mit der obigen URL)

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

Wenn dies korrekt funktioniert, wird es zunächst um die Seite zu laden, die JavaScript ausführen, und die Seite neu. Sie werden dann in der Lage sein, den $ Zeitzone Variable zu lesen und es zu einem Vergnügen nutzen! Es gibt die aktuelle Zeitzone UTC / GMT Offset (GMT -7) oder was auch immer Zeitzone Sie sind in.

Beantwortet am 09/04/2011 um 20:16
quelle vom benutzer

stimmen
18

Zuerst verstehen , dass die Zeitzone Erkennung in JavaScript unvollkommen ist. Sie können die lokal bekommen Zeitzonen - Offset für ein bestimmtes Datum und die Uhrzeit mit getTimezoneOffsetauf einer Instanz des DateObjekts, aber das ist nicht ganz das gleiche wie eine Voll IANA Zeitzone wie America/Los_Angeles.

Es gibt einige Optionen, die zwar arbeiten können:

  • Die meisten modernen Browser unterstützen IANA Zeitzonen bei der Umsetzung der ECMAScript Internationalization API , so können Sie dies tun:

    const tzid = Intl.DateTimeFormat().resolvedOptions().timeZone;
    

    Das Ergebnis ist eine Zeichenfolge, die die IANA Zeitzoneneinstellung des Rechners enthält, in dem der Code ausgeführt wird.

    Unterstützte Umgebungen sind aufgelistet in der Intl Kompatibilitätstabelle . Erweitern Sie den DateTimeFormatAbschnitt, und Blick auf die Funktion benannt resolvedOptions().timeZone defaults to the host environment.

  • Wenn Sie eine größere Menge von Umgebungen, wie zB älterer Web - Browser unterstützen müssen, können Sie eine Bibliothek verwenden , um eine machen Vermutung in der Zeitzone. Sie arbeiten , indem zuerst versuchen , die IntlAPI , wenn es verfügbar ist, und wenn es nicht vorhanden ist, sie zu verhören die getTimezoneOffsetFunktion des DateObjekts, für verschiedene Zeitpunkte, die Ergebnisse mit einer entsprechenden Zeitzone von einem internen Datensatz zu wählen.

    Sowohl jsTimezoneDetect und Zeit-Zeitzone haben diese Funktionalität.

    // using jsTimeZoneDetect
    var tzid = jstz.determine().name();
    
    // using moment-timezone
    var tzid = moment.tz.guess();
    

    In beiden Fällen kann das Ergebnis nur als Vermutung gedacht werden. Die Vermutung kann in vielen Fällen richtig sein, aber nicht alle von ihnen.

    Darüber hinaus haben diese Bibliotheken in regelmäßigen Abständen aktualisiert werden , um die Tatsache , dass viele älteren JavaScript - Implementierungen nur die bewusst sind , entgegenzuwirken aktuellen Tageslichtregelzone für ihre lokale Zeit spart Zeit. Mehr Details über das hier.

Letztlich ist ein besserer Ansatz , um tatsächlich Ihre Benutzer für ihre Zeitzone zu stellen. Geben Sie eine Einstellung , dass sie sich ändern können. Sie können eine der oben genannten Optionen verwenden , um eine wählen Standard - Einstellung, aber nicht machen es unmöglich , von der in Ihrer Anwendung abweicht.

Es gibt auch den ganz anderen Ansatz der nicht auf der Zeitzoneneinstellung des Computers des Benutzers überhaupt zu verlassen. Wenn Sie Breiten- und Längenkoordinaten können Stattdessen sammeln, können Sie diese zu einer Zeitzone lösen mit einer dieser Methoden . Das funktioniert gut auf mobilen Geräten.

Beantwortet am 25/03/2014 um 04:47
quelle vom benutzer

stimmen
18

Um die Zeitzone einreichen Offset als HTTP - Header auf AJAX - Anfragen mit jQuery

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-TZ-Offset", -new Date().getTimezoneOffset()/60);
    }
});

Sie können auch etwas ähnliches tun , um die tatsächlichen Zeitzonennamen , indem Sie erhalten moment.tz.guess();von http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

Beantwortet am 13/09/2012 um 03:05
quelle vom benutzer

stimmen
18

Ich habe noch nicht eine detaillierte Antwort hier gesehen, dass die Zeitzone bekommt. Sie sollten nicht durch die IP-Adresse oder verwenden Sie PHP (lol) oder falsch raten von einem Offset-geocodieren müssen.

Zum einen ist eine Zeitzone nicht nur ein Offset von GMT. Es ist ein Bereich des Landes, in dem die Zeitregeln von lokalen Normen festgelegt sind. Einige Länder haben die Sommerzeit, und schalten auf DST zu unterschiedlichen Zeiten. Es ist in der Regel wichtig, die tatsächliche Zone zu erhalten, nicht nur die aktuellen Offset.

Wenn Sie beabsichtigen, diese Zeitzone zu speichern, zum Beispiel in Benutzereinstellungen möchten Sie die Zone und nicht nur den Offset. Für Echtzeit-Conversions wird es nicht viel Materie.

Nun, um die Zeitzone zu erhalten mit Javascript Sie diese verwenden können:

>> new Date().toTimeString();
"15:46:04 GMT+1200 (New Zealand Standard Time)"
//Use some regular expression to extract the time.

Allerdings fand ich es einfacher, einfach dieses robuste Plugin zu verwenden, die die Olsen formatiert Zeitzone zurückgibt:

https://github.com/scottwater/jquery.detect_timezone

Beantwortet am 30/08/2012 um 06:08
quelle vom benutzer

stimmen
16

Einfach, benutzen Sie einfach die JavaScript - getTimezoneOffsetFunktion wie folgt:

-new Date().getTimezoneOffset()/60;
Beantwortet am 27/05/2012 um 18:25
quelle vom benutzer

stimmen
16

Mit PHP Datumsfunktion finden Sie das Datum Uhrzeit des Servers erhalten, auf der Website befindet. Die einzige Möglichkeit, Benutzer Zeit zu bekommen, ist JavaScript zu verwenden.

Aber ich schlage vor , Sie zu, wenn Sie Ihre Website - Registrierung erforderlich sind dann beste Weg ist , Benutzer während der Registrierung als Pflichtfeld zu fragen. Sie können verschiedene Zeitzonen in der Registerseite Liste und in der Datenbank speichern. Danach , wenn die Besucher Benutzer - Login , dann können Sie für diese Sitzung Standardzeitzone eingestellt , wie pro gewählter Zeitzone des Benutzers. Sie können eine bestimmte Zeitzone mit PHP - Funktion eingestellt date_default_timezone_set. Damit ist die angegebene Zeitzone für die Nutzer.

Grundsätzlich Benutzer Zeitzone geht auf Client-Seite, also müssen wir JavaScript für diese.

Im Folgenden finden Sie das Skript Benutzerzeitzone PHP und JavaScript erhalten verwenden.

<?php
#http://www.php.net/manual/en/timezones.php List of Time Zones
function showclienttime()
{
  if(!isset($_COOKIE['GMT_bias']))
  {
    ?>
    <script type="text/javascript">
    var Cookies = {};
    Cookies.create = function (name, value, days) {
      if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
      } else {
        var expires = "";
      }
      document.cookie = name + "=" + value + expires + "; path=/";
      this[name] = value;
    }

    var now = new Date();
    Cookies.create("GMT_bias",now.getTimezoneOffset(),1);
    window.location = "<?php echo $_SERVER['PHP_SELF'];?>";
    </script>
    <?php
  } else {
    $fct_clientbias = $_COOKIE['GMT_bias'];
  }

  $fct_servertimedata = gettimeofday();
  $fct_servertime = $fct_servertimedata['sec'];
  $fct_serverbias = $fct_servertimedata['minuteswest'];
  $fct_totalbias = $fct_serverbias – $fct_clientbias;
  $fct_totalbias = $fct_totalbias * 60;
  $fct_clienttimestamp = $fct_servertime + $fct_totalbias;
  $fct_time = time();
  $fct_year = strftime("%Y", $fct_clienttimestamp);
  $fct_month = strftime("%B", $fct_clienttimestamp);
  $fct_day = strftime("%d", $fct_clienttimestamp);
  $fct_hour = strftime("%I", $fct_clienttimestamp);
  $fct_minute = strftime("%M", $fct_clienttimestamp);
  $fct_second = strftime("%S", $fct_clienttimestamp);
  $fct_am_pm = strftime("%p", $fct_clienttimestamp);
  echo $fct_day.", ".$fct_month." ".$fct_year." ( ".$fct_hour.":".$fct_minute.":".$fct_second." ".$fct_am_pm." )";
}

showclienttime();
?>

Aber nach meiner Sicht, ist es besser, den Benutzer zu fragen, ob Anmeldung in Ihrem Projekt ist obligatorisch.

Beantwortet am 16/09/2010 um 06:59
quelle vom benutzer

stimmen
16

Wer weiß von Diensten, die IP zu geografischen Standort übereinstimmen

Nun, zum Glück für Sie die Antwort auf unserer eigenen Stackoverflow - Website: Wie das Land bekommen nach einer bestimmten IP?

Spoiler: http://www.hostip.info/use.html

Beantwortet am 04/08/2008 um 12:11
quelle vom benutzer

stimmen
15

javascript:

function maketimus(timestampz)
{
    var linktime = new Date(timestampz * 1000);
    var linkday = linktime.getDate();
    var freakingmonths=new Array();

    freakingmonths[0]="jan";
    freakingmonths[1]="feb";
    freakingmonths[2]="mar";
    freakingmonths[3]="apr";
    freakingmonths[4]="may";
    freakingmonths[5]="jun";
    freakingmonths[6]="jul";
    freakingmonths[7]="aug";
    freakingmonths[8]="sep";
    freakingmonths[9]="oct";
    freakingmonths[10]="nov";
    freakingmonths[11]="dec";

    var linkmonthnum = linktime.getMonth();
    var linkmonth = freakingmonths[linkmonthnum];
    var linkyear = linktime.getFullYear();
    var linkhour = linktime.getHours();
    var linkminute = linktime.getMinutes();

    if (linkminute < 10)
    {
        linkminute = "0" + linkminute;
    }

    var fomratedtime = linkday + linkmonth + linkyear + " " + linkhour + ":" + linkminute + "h";
    return fomratedtime;
}    

Geben Sie einfach Ihre Zeiten in UNIX Zeitformat zu dieser Funktion javascript bereits die Zeitzone des Benutzers kennt.

so was:

php:

echo '<script type="text/javascript">
var eltimio = maketimus('.$unix_timestamp_ofshiz.');
document.write(eltimio);
</script><noscript>pls enable javascript</noscript>';

dies wird immer die Zeiten korrekt wieder, basierend auf der Zeitzone die Person auf seinem Computer Uhr eingestellt hat, keine Notwendigkeit, etwas zu jemand fragen und sie in Orte speichern Gott sei Dank!

Beantwortet am 28/08/2011 um 00:00
quelle vom benutzer

stimmen
14

verwenden IP-Adresse nicht endgültig Position zu bestimmen (und hense Zeitzone) - das ist, weil mit NAT, Proxies (immer beliebter) und VPNs, IP-Adressen müssen nicht realistisch der Benutzer tatsächliche Lage widerspiegeln, aber der Ort, an dem der Server Durchführung dieser Protokolle befinden.

Ähnlich wie Area Codes ist nicht mehr nützlich für ein Telefon Benutzer gefunden ist, die Popularität der Nummernübertragbarkeit gegeben.

IP und andere Techniken , die oben sind für nützlich gezeigt was auf eine Standard , dass der Benutzer / korrekt einstellen kann.

Beantwortet am 02/01/2013 um 19:05
quelle vom benutzer

stimmen
14

Die Magie scheint alles in zu sein

visitortime.getTimezoneOffset()

Das ist cool, ich wusste nicht, dass. Ist es in IE arbeiten, etc? Von dort aus sollten Sie in der Lage sein, JS zu verwenden, um AJAX, Cookies, was auch immer. Ich würde wahrscheinlich die Cookie-Route selbst gehen.

Sie müssen, damit der Benutzer es aber ändern. Wir haben versucht, die Entfernung zu kennen zu nutzen (über MaxMind) dieses eine tun, während vor, und es war falsch ziemlich oft - genug, um es nicht wert zu machen tun, so dass wir lassen Sie einfach die Benutzer legen Sie es in ihrem Profil und zeigen eine Mitteilung an die Nutzer, die haben nicht die ihrigen noch festgelegt.

Beantwortet am 03/08/2008 um 21:40
quelle vom benutzer

stimmen
11

Eine einfache Möglichkeit, es zu tun ist durch die Verwendung von:

new Date().getTimezoneOffset();
Beantwortet am 01/12/2011 um 12:08
quelle vom benutzer

stimmen
11

Wenn Sie geschehen sein mit OpenID zur Authentifizierung, die einfache Registrierungs Erweiterung würde das Problem für authentifizierte Benutzer lösen (Sie werden von tz in numerischen konvertieren müssen).

Eine andere Möglichkeit wäre es, die Zeitzone aus dem User-Agent des Landes bevorzugt zu schließen. Dies ist eine etwas grobe Methode (wird nicht für en-US arbeiten), aber macht eine gute Annäherung.

Beantwortet am 30/08/2008 um 10:29
quelle vom benutzer

stimmen
10

Hier ist ein Artikel (mit Quellcode), die erklärt, wie zu bestimmen, und lokalisiert Zeit in einer ASP.NET (VB.NET, C #) Anwendung:

Es ist Zeit

Kurz gesagt, verläßt sich der beschriebene Ansatz auf der JavaScript - getTimezoneOffsetFunktion, die den Wert zurückgibt, der durch Code-behind in dem Session - Cookie und verwendet wird gespeichert Zeitwert zwischen GMT und Ortszeit einzustellen. Das Schöne daran ist , dass der Benutzer muss nicht die Zeitzone angeben (der Code tut es automatisch). Es ist mehr beteiligt (das ist , warum ich auf den Artikel - Link), aber bereitgestellten Code macht es wirklich einfach zu bedienen. Ich vermute , dass Sie die Logik in PHP und anderen Sprachen umwandeln können (solange Sie ASP.NET verstehen).

Beantwortet am 25/05/2010 um 01:11
quelle vom benutzer

stimmen
8

Einfach mit JSund PHP:

Auch wenn der Benutzer kann verwirren mit seiner internen Uhr und / oder Zeitzone, die beste Weise , die ich bisher gefunden, um den Versatz zu erhalten bleibt new Date().getTimezoneOffset();. Seine nicht-invasive, nicht geben Kopfschmerzen und beseitigt die Notwendigkeit an Dritte angewiesen.

Angenommen , i eine Tabelle , usersdie ein Feld enthält date_created int(13), Unix - Zeitstempel zu speichern;

Unter der Annahme einen Client creates a new account, werden die Daten empfangen durch post, und ich brauche , um insert/updatedie date_created columnmit dem Unix - Zeitstempel des Clients, nicht dem Server.

Da die timezoneoffset zum Zeitpunkt der insert / update benötigt wird, wird es als ein zusätzliches $ _POST Element übergeben, wenn der Kunde das Formular abschickt, wodurch die Notwendigkeit, es zu speichern, in Sitzungen und / oder Cookies und kein zusätzlicher Server trifft entweder.

var off = (-new Date().getTimezoneOffset()/60).toString();//note the '-' in front which makes it return positive for negative offsets and negative for positive offsets
var tzo = off == '0' ? 'GMT' : off.indexOf('-') > -1 ? 'GMT'+off : 'GMT+'+off;

Angenommen , der Server empfängt tzoals $_POST['tzo'];

$ts = new DateTime('now', new DateTimeZone($_POST['tzo']);
$user_time = $ts->format("F j, Y, g:i a");//will return the users current time in readable format, regardless of whether date_default_timezone() is set or not.
$user_timestamp = strtotime($user_time);

Insert / update date_created=$user_timestamp.

Wenn die date_created abrufen, können Sie den Zeitstempel wie so konvertieren:

$date_created = //get from db
$created = date("F j, Y, g:i a",$date_created);//return it to the user or whatever

Nun kann dieses Beispiel die eigenen Bedürfnisse anpassen, wenn es um das Einfügen eines kommt firstZeitstempel ... Wenn es um einen zusätzlichen Zeitstempel kommt oder Tisch, u sollten für die Zukunft der tzo Wert in die Benutzer - Tabelle prüfen , Einfügen oder Einstellung als Sitzung oder als Cookie.

PS Was aber, wenn der Benutzer reist und schaltet Zeitzonen. in Protokollen auf GMT + 4, sich schnell zu GMT-1 und in wieder logs. Letzte Login in der Zukunft sein würde.

Ich denke ... wir denken zu viel.

Beantwortet am 15/09/2014 um 02:19
quelle vom benutzer

stimmen
7

Versuchen Sie, diese PHP-Code

<?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'];
?>
Beantwortet am 30/07/2012 um 09:08
quelle vom benutzer

stimmen
7

Hier ist, wie ich es tun. Dies wird die PHP Standard-Zeitzone auf die lokale Zeitzone des Benutzers eingestellt. Fügen Sie einfach die folgenden auf der Oberseite der alle Seiten:

<?php
session_start();

if(!isset($_SESSION['timezone']))
{
    if(!isset($_REQUEST['offset']))
    {
    ?>
        <script>
        var d = new Date()
        var offset= -d.getTimezoneOffset()/60;
        location.href = "<?php echo $_SERVER['PHP_SELF']; ?>?offset="+offset;
        </script>
        <?php   
    }
    else
    {
        $zonelist = array('Kwajalein' => -12.00, 'Pacific/Midway' => -11.00, 'Pacific/Honolulu' => -10.00, 'America/Anchorage' => -9.00, 'America/Los_Angeles' => -8.00, 'America/Denver' => -7.00, 'America/Tegucigalpa' => -6.00, 'America/New_York' => -5.00, 'America/Caracas' => -4.30, 'America/Halifax' => -4.00, 'America/St_Johns' => -3.30, 'America/Argentina/Buenos_Aires' => -3.00, 'America/Sao_Paulo' => -3.00, 'Atlantic/South_Georgia' => -2.00, 'Atlantic/Azores' => -1.00, 'Europe/Dublin' => 0, 'Europe/Belgrade' => 1.00, 'Europe/Minsk' => 2.00, 'Asia/Kuwait' => 3.00, 'Asia/Tehran' => 3.30, 'Asia/Muscat' => 4.00, 'Asia/Yekaterinburg' => 5.00, 'Asia/Kolkata' => 5.30, 'Asia/Katmandu' => 5.45, 'Asia/Dhaka' => 6.00, 'Asia/Rangoon' => 6.30, 'Asia/Krasnoyarsk' => 7.00, 'Asia/Brunei' => 8.00, 'Asia/Seoul' => 9.00, 'Australia/Darwin' => 9.30, 'Australia/Canberra' => 10.00, 'Asia/Magadan' => 11.00, 'Pacific/Fiji' => 12.00, 'Pacific/Tongatapu' => 13.00);
        $index = array_keys($zonelist, $_REQUEST['offset']);
        $_SESSION['timezone'] = $index[0];
    }
}

date_default_timezone_set($_SESSION['timezone']);

//rest of your code goes here
?>
Beantwortet am 28/01/2012 um 09:21
quelle vom benutzer

stimmen
6

Eine mögliche Option ist , die verwenden DateHeader - Feld, die in definierten RFC 7231 und sollten die Zeitzone aufzunehmen. Natürlich ist es nicht garantiert , dass der Wert wirklich die Zeitzone des Client ist, aber es kann ein guter Ausgangspunkt sein.

Beantwortet am 09/09/2014 um 00:25
quelle vom benutzer

stimmen
5

einen gültigen TZ-Datenbank Namen der Zeitzone in PHP zu erhalten ist ein zweistufiger Prozess:

1) Mit Javascript, erhalten die Zeitzonen in Minuten durch getTimezoneOffset. Dieser Versatz ist positiv, wenn die lokale Zeitzone hinter UTC und negativ ist , wenn es voraus ist. So müssen Sie ein umgekehrtes Vorzeichen zum Offset hinzuzufügen.

var timezone_offset_minutes = new Date().getTimezoneOffset();
timezone_offset_minutes = timezone_offset_minutes == 0 ? 0 : -timezone_offset_minutes;

Führen Sie diese PHP-Offset.

2) In PHP konvertieren dieser Versatz in eine gültige Zeitzone Namen mit timezone_name_from_abbr Funktion.

// Just an example.
$timezone_offset_minutes = -360;  // $_GET['timezone_offset_minutes']

// Convert minutes to seconds
$timezone_name = timezone_name_from_abbr("", $timezone_offset_minutes*60, false);

// America/Chicago
echo $timezone_name;

Ich habe eine Blog - Post auf ihn geschrieben: http://usefulangle.com/post/31/detect-user-browser-timezone-name-in-php Es enthält auch eine Demo.

Beantwortet am 10/01/2017 um 11:56
quelle vom benutzer

stimmen
5

Sie könnte es mit auf dem Client tun Moment-Zeitzone und den Wert an den Server senden; Verwendungsbeispiel:

> moment.tz.guess()
"America/Asuncion"
Beantwortet am 13/09/2016 um 06:19
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more