Determinați Timezone unui utilizator

voturi
529

Există vreo modalitate standard pentru un server web pentru a fi capabil de a determina fusul orar al unui utilizator într-o pagină web?

Poate dintr-un antet HTTP sau o parte din șirul user-agent?

Întrebat 01/08/2008 la 01:42
sursa de către utilizator
În alte limbi...                            


25 răspunsuri

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

Metoda getTimezoneOffset()va scădea timpul de GMT și de a reveni la numărul de minute. Deci , dacă locuiți în GMT-8, acesta va reveni 480.

Pentru a pune acest lucru în ore, se împarte la 60. De asemenea, observați că semnul este opusul a ceea ce ai nevoie - de calcularea GMT offset de fusul orar, nu fusul orar este decalat față de GMT. Pentru a remedia acest lucru, pur și simplu se înmulțește cu -1.

De asemenea , rețineți că w3school spune:

Valoarea returnată nu este o constantă, din cauza practicii de a utiliza ora de vară.

Publicat 27/11/2009 la 18:52
sursa de către utilizator

voturi
174

Cel mai popular mod (== standard?) De determinare a zonei de timp l - am văzut în jurul valorii este pur și simplu cere utilizatorilor înșiși. Dacă site - ul dvs. necesită abonament, acest lucru ar putea fi salvate în datele de profil ale utilizatorilor. Pentru utilizatorii Anon, datele pot fi afișate ca UTC sau GMT sau a unor astfel.

Nu încerc să fiu desteptul. Doar că, uneori, unele probleme au soluții mai fine în afara oricărui context de programare.

Publicat 03/08/2008 la 20:30
sursa de către utilizator

voturi
77

Nu există antete HTTP care va raporta fusul orar clienților până în prezent, deși s-a sugerat să-l includă în caietul de sarcini HTTP.

Dacă mi-a fost, aș încerca, probabil, să aducă fusul orar folosind clientside JavaScript și apoi trimiteți-l la server folosind Ajax sau ceva.

Publicat 01/08/2008 la 13:19
sursa de către utilizator

voturi
47

Javascript este cel mai simplu mod de a obține ora locală a clientului. Aș sugera folosind o XMLHttpRequestpentru a trimite înapoi ora locală, iar în cazul în care nu reușește, cad înapoi la fusul orar detectată pe baza adresei IP a acestora.

În ceea ce privește localizarea geografică, am folosit MaxMind GeoIP pe mai multe proiecte și funcționează bine, deși nu sunt sigur dacă acestea furnizează date de fus orar. Este un serviciu pe care îl plătiți pentru ele și oferă actualizări lunare la baza de date. Ele oferă ambalaje în mai multe limbi web.

Publicat 01/08/2008 la 16:11
sursa de către utilizator

voturi
39

Aici este o solutie robusta JavaScript pentru a determina fusul orar browser-ul este.

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

https://bitbucket.org/pellepim/jstimezonedetect

Publicat 06/08/2012 la 22:22
sursa de către utilizator

voturi
34

Aici este un mod mai complet.

  1. Ia fusul orar offset pentru utilizator
  2. Testați câteva zile pe DLS limite pentru a determina dacă acestea sunt într-o zonă care utilizează DLS.

Cu excepția mai jos:

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

Obținerea TZ și DST de la JS (prin Way Back Machine)

Publicat 30/03/2011 la 21:48
sursa de către utilizator

voturi
26

Folosind abordarea lui Unkwntech, am scris o funcție folosind jQuery și PHP. Acest lucru este testat și funcționează!

Pe pagina PHP în care sunt doriți să aibă fusul orar ca o variabilă, au acest fragment de cod undeva aproape de partea de sus a paginii

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

Acest lucru se va citi variabila de sesiune „de timp“, pe care suntem acum pe cale de a crea.

Pe aceeași pagină, în, trebuie să în primul rând includ jQuery:

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

De asemenea, în, sub jQuery, inserați acest lucru:

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

Tu poate sau nu poate fi observat, dar ai nevoie pentru a schimba URL-ul pentru domeniul dvs. actuale.

Inca un lucru. Probabil vă întrebați ce timezone.php naiba este. Ei bine, este pur și simplu acest lucru: ( a crea un nou fișier numit timezone.php și punctul să - l cu URL - ul de mai sus)

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

Dacă funcționează corect, acesta va încărca mai întâi pagină, executați JavaScript și reîncărcați pagina. Veți putea apoi să citească $ variabila de fus orar și să-l utilizați pentru plăcerea ta! Se returnează curent UTC / GMT diferența de fus orar (GMT -7) sau orice fus orar vă aflați.

Publicat 09/04/2011 la 20:16
sursa de către utilizator

voturi
18

În primul rând, să înțeleagă că detectarea de fus orar în JavaScript este imperfectă. Puteți obține locale diferența de fus orar pentru o anumită dată și oră , folosind getTimezoneOffsetpe o instanță a Dateobiectului, dar asta nu e chiar la fel ca și un plin fus orar IANA cum ar fi America/Los_Angeles.

Există câteva opțiuni care pot lucra, deși:

  • Cele mai multe browsere moderne fusuri orare IANA în punerea lor în aplicare a API ECMAScript Internaționalizare , astfel încât să puteți face acest lucru:

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

    Rezultatul este un șir de caractere care conține setarea fusului orar IANA a computerului în cazul în care codul se execută.

    Mediile acceptate sunt enumerate în tabelul de compatibilitate Intl . Extindeți DateTimeFormatsecțiunea, și uita - te la caracteristica pe nume resolvedOptions().timeZone defaults to the host environment.

  • Dacă aveți nevoie pentru a sprijini un set mai larg de medii, cum ar fi browserele web mai vechi, puteți utiliza o bibliotecă pentru a face o presupunere educat la fusul orar. Ei lucrează prin încercarea mai întâi IntlAPI dacă este disponibilă, și când nu este disponibil, interogheze getTimezoneOffsetfuncția Dateobiectului, pentru mai multe puncte diferite în timp, folosind rezultatele pentru a alege un fus orar corespunzător dintr - un set de date interne.

    Ambele jsTimezoneDetect și moment de - a fusului orar au această funcționalitate.

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

    În ambele cazuri, rezultatul poate fi considerat doar ca o presupunere. Ghicirii poate fi corect, în multe cazuri, dar nu toate dintre ele.

    In plus, aceste biblioteci trebuie să fie actualizate periodic pentru a contracara faptul că multe implementări mai vechi JavaScript sunt doar conștienți de curent de economisire regula de timp pentru fusul orar locală vară. Mai multe detalii despre asta aici.

În cele din urmă, o abordare mai bună este de a cere de fapt utilizatorul pentru fusul orar al acestora. Furnizarea de o setare pe care le pot schimba. Puteți utiliza una dintre opțiunile de mai sus pentru a alege un implicit setare, dar nu fac imposibilă să se abată de la faptul că , în aplicația dumneavoastră.

Există , de asemenea , abordarea cu totul diferită de care nu se bazează pe setarea fusului orar al calculatorului utilizatorului la toate. În schimb, dacă vă puteți aduna coordonatele de latitudine și longitudine, puteți rezolva cele la un fus orar utilizând una dintre aceste metode . Acest lucru funcționează bine pe dispozitive mobile.

Publicat 25/03/2014 la 04:47
sursa de către utilizator

voturi
18

Pentru a trimite fusul orar de compensare ca un antet HTTP pe cereri AJAX cu jQuery

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

Puteți face , de asemenea , ceva similar pentru a obține timp numele real de zonă , prin utilizarea moment.tz.guess();de http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

Publicat 13/09/2012 la 03:05
sursa de către utilizator

voturi
18

Încă nu am văzut un răspuns detaliat aici, care devine fusul orar. Nu ar trebui să geocodifica prin adresa IP sau de a folosi PHP (lol) sau incorect ghici de la un offset.

În primul rând un fus orar nu este doar un offset de la GMT. Este o suprafață de teren în care normele de timp sunt stabilite de standardele locale. Unele țări au de vară, și va porni DST la momente diferite. Este de obicei important pentru a obține zona reală, nu doar curentul de offset.

Dacă intenționați să stocați acest fus orar, de exemplu, în preferințele utilizatorului pe care doriți zona și nu doar offset. Pentru conversiile în timp real nu va conta prea mult.

Acum, pentru a obține fusul orar cu javascript puteți utiliza acest lucru:

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

Cu toate acestea am găsit-o mai ușor de utilizat, pur și simplu acest plugin robust, care returnează fusul orar formatat Olsen:

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

Publicat 30/08/2012 la 06:08
sursa de către utilizator

voturi
16

Simplu, trebuie doar să utilizați JavaScript getTimezoneOffsetfuncția astfel:

-new Date().getTimezoneOffset()/60;
Publicat 27/05/2012 la 18:25
sursa de către utilizator

voturi
16

Cu funcția PHP date vei primi ora data de server pe care se află site-ul. Singura modalitate de a obține timpul de utilizare este de a utiliza JavaScript.

Dar te - am sugera, în cazul în care site - ul dvs. au nevoie de inregistrare , atunci cel mai bun mod este de a cere utilizatorului în timp ce înregistrarea în calitate de câmp obligatoriu. Puteți lista zone de timp diferite în pagina de registru și de a salva că în baza de date. După aceasta , dacă ghidul de autentificare pe site - ul atunci puteți seta fusul orar prestabilit pentru acea sesiune ca pe fusul orar selectat utilizatorilor. Puteți seta orice fus orar specific , utilizând funcția PHP date_default_timezone_set. Aceasta a seta fusul orar specificat pentru utilizatori.

Practic fusul orar al utilizatorilor este merge la partea de client, deci trebuie să folosim JavaScript pentru acest lucru.

Mai jos este script-ul pentru a obține fusul orar al utilizatorilor folosind PHP și 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();
?>

Dar, în conformitate cu punctul meu de vedere, este mai bine să solicite utilizatorilor dacă înregistrarea este obligatorie în proiectul dumneavoastră.

Publicat 16/09/2010 la 06:59
sursa de către utilizator

voturi
16

Oricine știe orice servicii care se va potrivi IP la locația geografică

Norocul vă că răspunsul poate fi găsit pe propriul site - ul nostru StackOverflow: Cum să obțineți Țara în conformitate cu un anumit IP?

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

Publicat 04/08/2008 la 12:11
sursa de către utilizator

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

pur și simplu oferă ori în format UNIX Timestamp la această funcție, JavaScript știe deja fusul orar al utilizatorului.

asa:

php:

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

acest lucru se va afișa întotdeauna timpii corect în funcție de fusul orar persoana a setat pe ceasul său calculator, nu este nevoie de a cere nimic nimănui și salvați-l în locuri mulțumesc lui Dumnezeu!

Publicat 28/08/2011 la 00:00
sursa de către utilizator

voturi
14

Nu utilizați adresa IP pentru a determina definitiv locație (și fusul orar hense) - asta deoarece cu NAT, Proxy-uri (din ce în ce mai populare), și VPN-uri, adrese IP nu neapărat reflectă în mod realist locației actuale a utilizatorului, dar locația la care serverele punere în aplicare a acestor protocoale de ședere.

Similar cu modul în care Codurile zonă nu mai este utilă pentru localizarea unui utilizator de telefon sunt, având în vedere popularitatea portabilității numerelor.

IP și alte tehnici prezentate mai sus sunt utile pentru ceea ce sugerează o valoare implicită pe care utilizatorul poate ajusta / corecta.

Publicat 02/01/2013 la 19:05
sursa de către utilizator

voturi
14

Magia totul pare a fi în

visitortime.getTimezoneOffset()

Asta e cool, nu știam despre asta. Funcționează în IE, etc? De acolo, ar trebui să poată utiliza JS la ajax, seta cookie-uri, oricare ar fi. Mi-ar merge, probabil, ruta cookie mine.

Va trebui să permită utilizatorului să-l schimbe, totuși. Am încercat să folosim geolocalizare (prin MaxMind) pentru a face acest lucru un timp în urmă, și a fost greșit în mod rezonabil de multe ori - suficient pentru a face ca nu merita sa faci, asa ca ne-am permite utilizatorului să-l stabilit în profilul lor, și arată o notificare pentru utilizatorii care nu a lor au stabilit încă.

Publicat 03/08/2008 la 21:40
sursa de către utilizator

voturi
11

Un mod simplu de a face acest lucru este prin utilizarea:

new Date().getTimezoneOffset();
Publicat 01/12/2011 la 12:08
sursa de către utilizator

voturi
11

Dacă se întâmplă să fie folosind OpenID pentru autentificare, extensie simplă de înregistrare ar rezolva problema pentru utilizatorii autentificați (Va trebui să convertiți de la tz la numeric).

O altă opțiune ar fi să se deducă fusul orar din preferința tara agentului utilizator. Aceasta este o metodă oarecum brută (nu va funcționa pentru en-US), dar face o bună aproximare.

Publicat 30/08/2008 la 10:29
sursa de către utilizator

voturi
10

Aici este un articol (cu codul sursă), care explică modul de determinare și de a folosi timp localizate într-un (VB.NET, C #) aplicație ASP.NET:

Era și timpul

Pe scurt, abordarea descrisă se bazează pe JavaScript getTimezoneOffset, care returnează valoarea care este salvată în cookie - ul de sesiune și utilizat de cod în spatele pentru a ajusta valorile de timp între GMT și ora locală. Cel mai frumos lucru este că utilizatorul nu are nevoie pentru a specifica fusul orar (codul face automat). Nu este implicat mai mult (de aceea am link la articol), dar codul furnizat o face foarte ușor de utilizat. Bănuiesc că poate converti logica de a PHP și alte limbi (atâta timp cât ați înțeles ASP.NET).

Publicat 25/05/2010 la 01:11
sursa de către utilizator

voturi
8

Simplu cu JSși PHP:

Chiar dacă utilizatorul poate pune cu ceasul său intern și / sau fusul orar, cel mai bun mod am găsit până acum, pentru a obține offset, rămâne new Date().getTimezoneOffset();. Sa non-invaziva, nu da de cap dureri și elimină necesitatea de a se baza pe terțe părți.

Spune că am un tabel userscare conține un câmp date_created int(13), pentru depozitarea timestamps unix;

Presupunând că un client creates a new account, datele sunt primite de către post, și am nevoie să cu unix timestamp - ul clientului, nu al serverului.insert/updatedate_created column

Deoarece timezoneoffset este necesară în momentul insert / update, acesta este trecut ca un element suplimentar $ _POST atunci când clientul trimite formularul, eliminând astfel necesitatea de a stoca în sesiuni și / sau cookie-uri, și nici un server suplimentar hit-uri, fie.

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;

Spune serverul primește tzoca $_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);

Inserare / actualizare date_created=$user_timestamp.

Când preluarea DATE_CREATED, puteți converti timestamp-ul astfel:

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

Acum, acest exemplu se poate potrivi nevoilor cuiva, atunci când este vorba de a introduce un firstmarcaj de timp ... Când este vorba de un marcaj de timp suplimentar, sau de masă, u ar putea dori să ia în considerare introducerea valorii TZO în tabelul de utilizatori pentru referințe ulterioare, sau setarea - l ca sesiune sau ca un cookie.

PS Dar dacă utilizatorul se deplasează și switch-uri fusurilor orare. Logs in la GMT + 4, călătorește rapid la GMT-1 și jurnalele din nou. Ultima autentificare ar fi în viitor.

Cred că ... ne gândim prea mult.

Publicat 15/09/2014 la 02:19
sursa de către utilizator

voturi
7

Încercați acest cod php

<?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'];
?>
Publicat 30/07/2012 la 09:08
sursa de către utilizator

voturi
7

Iată cum o fac. Acest lucru va seta fusul orar PHP implicit la fusul orar local al utilizatorului. Trebuie doar să inserați următoarele în partea de sus a tuturor paginilor:

<?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
?>
Publicat 28/01/2012 la 09:21
sursa de către utilizator

voturi
6

O opțiune posibilă este de a utiliza Datecâmpul de antet, care este definit în RFC 7231 și ar trebui să includă fusul orar. Desigur, nu este garantat că valoarea este într - adevăr fusul orar al clientului, dar poate fi un punct de plecare convenabil.

Publicat 09/09/2014 la 00:25
sursa de către utilizator

voturi
5

Obținerea unui TZ Bază de date nume de fus orar valid în PHP este un proces în două etape:

1) Cu Javascript, pentru a primi de fus orar compensate în câteva minute prin getTimezoneOffset. Această compensare va fi pozitiv dacă fusul orar local , se află în spatele UTC și negativ în cazul în care este înainte. Deci , trebuie să adăugați un semn opus offset.

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

Pass acest decalaj pentru PHP.

2) În PHP converti acest decalaj într - un nume de fus orar valid cu timezone_name_from_abbr funcție.

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

Am scris un articol de blog pe ea: http://usefulangle.com/post/31/detect-user-browser-timezone-name-in-php Acesta conține , de asemenea , un demo.

Publicat 10/01/2017 la 11:56
sursa de către utilizator

voturi
5

ai putea face pe client cu moment de -fus orar și trimite valoarea la server; Utilizarea eșantionului:

> moment.tz.guess()
"America/Asuncion"
Publicat 13/09/2016 la 06:19
sursa de către utilizator

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