Bepaal Tijdzone van een gebruiker

stemmen
539

Is er een standaard manier voor een webserver in staat zijn om de tijdzone van een gebruiker binnen een webpagina te bepalen?

Misschien van een HTTP-header of een deel van de user-agent string?

De vraag is gesteld op 01/08/2008 om 00:42
bron van user
In andere talen...                            


25 antwoorden

stemmen
77

Er zijn geen HTTP-headers die de cliënten tijdzone tot nu toe zal rapporteren, hoewel men heeft voorgesteld op te nemen in de HTTP-specificatie.

Als ik het was, zou ik waarschijnlijk proberen om de tijdzone te halen met behulp van clientside JavaScript en vervolgens voorleggen aan de server met behulp van Ajax of iets dergelijks.

antwoordde op 01/08/2008 om 13:19
bron van user

stemmen
47

Javascript is de gemakkelijkste manier om de lokale tijd van de klant te krijgen. Ik stel voor het gebruik van een XMLHttpRequestterug te sturen van de lokale tijd, en als dat niet lukt, valt terug naar de tijdzone gedetecteerd op basis van hun IP-adres.

Voor zover geolocatie, heb ik gebruikt MaxMind GeoIP aan verschillende projecten en het werkt goed, maar ik ben niet zeker of ze bieden tijdzone data. Het is een dienst die u betaalt voor en ze bieden maandelijkse updates aan uw database. Ze bieden wrappers in verschillende web talen.

antwoordde op 01/08/2008 om 16:11
bron van user

stemmen
174

De meest populaire (== standaard?) Manier om te bepalen de tijdzone die ik heb gezien rond is gewoon het stellen van de gebruikers zelf. Als uw website abonnement vereist, kan dit in de gebruikers profiel gegevens worden opgeslagen. Voor anon gebruikers, kan de data worden weergegeven als UTC of GMT of iets dergelijks.

Ik ben niet op zoek naar een wijsneus zijn. Het is gewoon dat soms wat problemen hebben fijnere oplossingen zoeken buiten elke programmeertaal context.

antwoordde op 03/08/2008 om 20:30
bron van user

stemmen
14

De magie lijkt allemaal te zijn in

visitortime.getTimezoneOffset()

Dat is cool, wist ik niet over. Werkt het in IE, etc? Vanaf daar moet je in staat zijn om JS gebruiken om Ajax te stellen cookies, wat dan ook. Ik zou waarschijnlijk gaan het cookie route mezelf.

U moet de gebruiker toestaan ​​om het wel te veranderen. We hebben geprobeerd om geolocatie (via MaxMind) gebruiken om dit te doen een tijdje geleden, en het was verkeerd redelijk vaak - genoeg om het niet de moeite waard te maken, dus we gewoon laten de gebruiker stelden zij die in hun profiel, en tonen een bericht aan gebruikers die hebben hen nog niet ingesteld.

antwoordde op 03/08/2008 om 21:40
bron van user

stemmen
16

Iedereen kent van alle services die overeenkomen IP naar geografische locatie

Nou, gelukkig voor jou dat antwoord is te vinden op onze eigen stackoverflow website: Hoe het land uit te krijgen volgens een bepaald IP?

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

antwoordde op 04/08/2008 om 12:11
bron van user

stemmen
11

Als je toevallig worden met behulp van OpenID voor authenticatie, eenvoudige registratie Uitbreiding zou het probleem voor geverifieerde gebruikers (Je moet om te zetten van tz tot numeriek) op te lossen.

Een andere optie zou zijn om de tijdzone in de user agent van het land de voorkeur af te leiden. Dit is een enigszins onzuivere methode (werkt niet bij en-US), maar maakt een goede benadering.

antwoordde op 30/08/2008 om 10:29
bron van user

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

De methode getTimezoneOffset()zal uw tijd af te trekken van GMT en terug te keren het aantal minuten. Dus als je in GMT-8 woont, keert hij terug 480.

Om dit in uren, verdeel afschrikken door 60. Merk ook op dat het teken is het tegenovergestelde van wat je nodig hebt - het is de berekening van GMT verschoven ten opzichte van de tijdzone, niet uw tijdzone is ten opzichte van GMT. Om dit te verhelpen, vermenigvuldigt met -1.

Merk ook op dat w3school zegt:

De geretourneerde waarde is geen constante, als gevolg van de praktijk van het gebruik Daylight Saving Time.

antwoordde op 27/11/2009 om 18:52
bron van user

stemmen
10

Hier is een artikel (met broncode) waarin wordt uitgelegd hoe om te bepalen en te gebruiken plaatselijke tijd in een ASP.NET (VB.NET, C #) toepassing:

Het zal tijd worden

Kortom, de beschreven aanpak is gebaseerd op de JavaScript- getTimezoneOffsetfunctie, die de waarde die wordt opgeslagen in de sessie cookie en gebruikt door de code-behind tot tijd waarden tussen GMT en lokale tijd aan te passen terug. Het leuke is dat de gebruiker niet nodig om de tijdzone te geven (de code doet dit automatisch). Er is meer betrokken (dit is de reden waarom ik een link naar het artikel), maar op voorwaarde code maakt het echt makkelijk te gebruiken. Ik vermoed dat u de logica om PHP en andere talen kunnen zetten (zolang je ASP.NET begrijpen).

antwoordde op 25/05/2010 om 01:11
bron van user

stemmen
16

Met PHP date functie kunt u de datum tijd van de server waarop de site is gelegen te krijgen. De enige manier om de gebruiker de tijd te krijgen is het gebruik van JavaScript.

Maar ik stel voor dat je, als uw site hebben registratie dan verplicht beste manier is om de gebruiker te vragen, terwijl registratie als verplicht veld. U kunt een lijst van verschillende tijdzones in het register pagina en op te slaan die in de database. Na deze als gebruiker inloggen op site dan kun je standaard tijdzone voor die sessie als per geselecteerde tijdzone gebruikers. U kunt een specifieke tijdzone in te stellen met behulp van PHP functie date_default_timezone_set. Dit zette de opgegeven tijdzone voor gebruikers.

In principe gebruikers tijdzone is gaat naar de client-kant, dus we moeten JavaScript gebruiken voor deze.

Hieronder is het script om gebruikers tijdzone te krijgen met behulp van PHP en JavaScript.

<?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();
?>

Maar volgens mijn standpunt, is het beter om te vragen aan de gebruikers als de registratie is verplicht in uw project.

antwoordde op 16/09/2010 om 06:59
bron van user

stemmen
34

Hier is een meer volledige manier.

  1. Klik hier voor de tijdzone te compenseren voor de gebruiker
  2. Test sommige dagen op DLS grenzen om te bepalen of ze in een zone die DLS gebruikt.

Behalve Onder:

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

Het krijgen van TZ en DST van JS (via Way Back Machine)

antwoordde op 30/03/2011 om 21:48
bron van user

stemmen
26

Met behulp van Unkwntech's benadering, schreef ik een functie met behulp van jQuery en PHP. Dit is getest en werkt!

Op de PHP-pagina waar u wilt dat de tijdzone als een variabele hebben, hebben dit stukje code ergens in de buurt van de bovenkant van de pagina:

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

Dit zal de sessie variabele "tijd", die we nu op het punt om te maken te lezen.

Op dezelfde pagina, in de, moet je in de eerste plaats onder meer jQuery:

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

Ook in de, onder de jQuery, plak deze:

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

Je kan wel of niet zijn opgevallen, maar je moet de url te veranderen naar uw huidige domein.

Nog een ding. U bent waarschijnlijk afvragen wat de heck timezone.php is. Nou, het is gewoon dit: (maak een nieuw bestand met de naam timezone.php en wijzen op het met de bovenstaande URL)

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

Als het goed werkt, zal hij eerst de pagina laden, voert u de JavaScript, en reload de pagina. U zult dan in staat zijn om de $ tijdzone variabele lezen en gebruiken om uw plezier! Het geeft de huidige UTC / GMT tijdzone (GMT -7) of wat tijdzone u zich bevindt.

antwoordde op 09/04/2011 om 20:16
bron van user

stemmen
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;
}    

simpelweg uw keer in UNIX Tijdformaat om deze functie, javascript al de tijdzone van de gebruiker weet.

soortgelijk:

php:

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

dit zal altijd de tijd te laten zien de juiste manier op basis van de tijdzone de persoon die op zijn computer klok, geen noodzaak om iets te vragen aan iedereen en sla het op naar plaatsen god zij dank!

antwoordde op 28/08/2011 om 00:00
bron van user

stemmen
11

Een eenvoudige manier om dit te doen is met behulp van:

new Date().getTimezoneOffset();
antwoordde op 01/12/2011 om 12:08
bron van user

stemmen
7

Hier is hoe ik het doe. Dit zal de PHP standaard tijdzone om de lokale tijdzone van de gebruiker in te stellen. Net plak het volgende aan de bovenkant van al uw pagina's:

<?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
?>
antwoordde op 28/01/2012 om 09:21
bron van user

stemmen
16

Gemakkelijk, gewoon gebruik maken van de JavaScript- getTimezoneOffsetfunctie als volgt:

-new Date().getTimezoneOffset()/60;
antwoordde op 27/05/2012 om 18:25
bron van user

stemmen
7

Probeer deze 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'];
?>
antwoordde op 30/07/2012 om 09:08
bron van user

stemmen
39

Hier is een robuuste JavaScript oplossing om de tijdzone van de browser is te bepalen.

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

https://bitbucket.org/pellepim/jstimezonedetect

antwoordde op 06/08/2012 om 22:22
bron van user

stemmen
18

Ik heb nog geen gedetailleerd antwoord hier dat de tijdzone wordt gezien. Je moet niet nodig om geocoderen op IP-adres of gebruik PHP (lol) of verkeerd raden van een offset.

In de eerste plaats een tijdzone is niet alleen een verschil met GMT. Het is een gebied van land, waarin de tijd die regels door lokale normen worden vastgesteld. Sommige landen hebben de zomertijd, en schakelt over op de zomertijd op verschillende tijden. Het is meestal belangrijk om de werkelijke zone te krijgen, niet alleen de huidige compenseren.

Als u van plan om deze tijdzone op te slaan, bijvoorbeeld in gebruikersvoorkeuren u de zone en niet alleen de offset. Voor realtime conversies zal het niet veel uit.

Nu, om de tijdzone met javascript u dit kunt gebruiken krijgen:

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

Maar ik vond het makkelijker om gewoon gebruik maken van deze robuuste plugin die de Olsen geformatteerde tijdzone terugkeert:

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

antwoordde op 30/08/2012 om 06:08
bron van user

stemmen
18

Om de tijdzone te compenseren als een HTTP-header op AJAX verzoeken met indienen jQuery

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

U kunt ook iets wat lijkt op de werkelijke naam van de tijdzone te doen door gebruik te maken moment.tz.guess();van http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

antwoordde op 13/09/2012 om 03:05
bron van user

stemmen
14

Laat IP-adres gebruiken om definitief locatie (en hense tijdzone) te bepalen - dat is omdat met NAT, Proxy (steeds populairder) en VPN's, IP-adressen niet noodzakelijk realistisch nota geeft de huidige locatie van de gebruiker, maar de plaats waar de servers uitvoering van deze protocollen bevinden.

Vergelijkbaar met hoe Netnummers niet langer bruikbaar zijn voor het lokaliseren van een telefoon gebruiker, gezien de populariteit van nummerportabiliteit.

IP en andere technieken die hierboven zijn bruikbaar voor het suggereren van een standaard die de gebruiker kan aanpassen / corrigeren.

antwoordde op 02/01/2013 om 19:05
bron van user

stemmen
18

In de eerste plaats begrijpen dat tijdzone detectie in JavaScript is onvolmaakt. U kunt de lokale krijgen tijdzone voor een bepaalde datum en tijd met behulp getTimezoneOffsetvan een instantie van het Dateobject, maar dat is niet helemaal hetzelfde als een full IANA tijdzone als America/Los_Angeles.

Er zijn een aantal opties die wel kunnen werken:

  • De meeste moderne browsers ondersteunen IANA tijdzones bij de uitvoering van de ECMAScript Internationalisering API , zodat u dit kunt doen:

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

    Het resultaat is een string met de IANA tijdzone van de computer waarop de code wordt uitgevoerd.

    Ondersteunde omgevingen zijn opgenomen in de Intl compatibiliteit tafel . Vouw de DateTimeFormatsectie, en kijk naar de functie genaamd resolvedOptions().timeZone defaults to the host environment.

  • Als u een bredere reeks omgevingen ondersteunen, zoals oudere webbrowsers, kunt u een bibliotheek gebruiken om een te maken educated guess op de tijdzone. Ze werken door eerst het proberen IntlAPI als het beschikbaar is, en als het niet beschikbaar, zij ondervragen de getTimezoneOffsetfunctie van het Dateobject, voor verschillende punten in de tijd, met behulp van de resultaten van een juiste tijdzone vanuit een interne dataset te kiezen.

    Zowel jsTimezoneDetect en ogenblik-tijdzone hebben deze functionaliteit.

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

    In beide gevallen is het resultaat kan alleen worden gedacht als een gok. De gok kan juist zijn in veel gevallen, maar niet allemaal.

    Daarnaast zijn deze bibliotheken moeten periodiek worden geactualiseerd met het feit dat veel oudere JavaScript-implementaties zijn alleen bewust van het tegengaan van de huidige zomertijd regel voor hun lokale tijdzone. Meer details over dat hier.

Uiteindelijk is een betere aanpak is om uw gebruiker daadwerkelijk vragen voor hun tijdzone. Zorg voor een instelling die ze kunnen veranderen. U kunt gebruik maken van een van de bovenstaande opties om te kiezen standaard instelling, maar maak het niet onmogelijk is om af te wijken van die in uw app.

Er is ook de geheel andere benadering van niet te vertrouwen op de tijdzone-instelling van de computer van de gebruiker te allen. In plaats daarvan, als u lengte- en breedtegraden kunt verzamelen, kunt u op te lossen die om een tijdzone met behulp van een van deze methoden . Dit werkt goed op mobiele apparaten.

antwoordde op 25/03/2014 om 04:47
bron van user

stemmen
6

Een mogelijke optie is om het te gebruiken Dategebied header, die wordt gedefinieerd in RFC 7231 en wordt verondersteld om de tijdzone op te nemen. Natuurlijk is het niet gegarandeerd dat de waarde is echt tijdzone van de klant, maar het kan een goed uitgangspunt zijn.

antwoordde op 09/09/2014 om 00:25
bron van user

stemmen
8

Eenvoudig met JSen PHP:

Hoewel de gebruiker kan knoeien met zijn interne klok en / of tijdzone, de beste manier die ik tot nu toe gevonden, om de offset te krijgen, blijft new Date().getTimezoneOffset();. De niet-invasieve, geeft niet het hoofd-pijn en elimineert de noodzaak een beroep te doen op derden.

Zeggen dat ik een tabel usersdie een veld bevat date_created int(13)voor het opslaan Unix tijdstempels;

Uitgaande van een klant creates a new account, wordt data ontvangen door post, en ik moet insert/updatehet date_created columnmet de klant unix timestamp, niet van de server.

Omdat de timezoneOffset nodig is op het moment van de insert / update wordt doorgegeven als een extra $ _POST element wanneer de klant legt de vorm, waardoor de noodzaak om het op te slaan in sessies en / of cookies, en geen extra server raakt ook niet.

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;

Spreek de server ontvangt 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);

Invoegen / bijwerken date_created=$user_timestamp.

Bij het ophalen van de date_created, kunt u de tijdstempel te zetten als volgt:

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

Nu kan dit bijvoorbeeld één van de behoeften, als het gaat om het plaatsen van een firsttimestamp ... Als het gaat om een extra timestamp, of tafel, kan u willen overwegen het invoegen van de tzo waarde in de gebruikers tabel voor later gebruik, of de oprichting ervan zo sessie of als een cookie.

PS Maar wat als de gebruiker reist en schakelt tijdzones. Opent in GMT + 4, zich snel GMT-1 en opent weer. Laatste login zou zijn in de toekomst.

Ik denk dat ... we denken te veel.

antwoordde op 15/09/2014 om 02:19
bron van user

stemmen
5

je zou kunnen doen op de client met ogenblik-tijdzone en stuur de waarde naar de server; monster gebruik:

> moment.tz.guess()
"America/Asuncion"
antwoordde op 13/09/2016 om 06:19
bron van user

stemmen
5

Het krijgen van een geldige TZ Database tijdzone naam in PHP is een proces in twee stappen:

1) Met Javascript, krijgen tijdzone offset in minuten door getTimezoneOffset. Deze offset zal positief als de lokale tijdzone is achter UTC en negatief zijn als het vooruit. Dus je moet een tegengesteld teken toe te voegen aan de offset.

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

Geef deze verschuiving naar PHP.

2) In PHP omzetten dit te compenseren in een geldige tijdzone naam met timezone_name_from_abbr functie.

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

Ik heb een blog post geschreven: http://usefulangle.com/post/31/detect-user-browser-timezone-name-in-php Het bevat een demo ook.

antwoordde op 10/01/2017 om 11:56
bron van user

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