Bir kullanıcının saat dilimi belirleyin

oy
539

Bir Web Server, web sayfası içinde bir kullanıcının dilimini belirlemek edebilmek için herhangi bir standart yol var mı?

Belki kullanıcı aracısı dizesi HTTP başlığı veya bir yerinden?

Oluştur 01/08/2008 saat 00:42
kaynak kullanıcı
Diğer dillerde...                            


25 cevaplar

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

Yöntem getTimezoneOffset()GMT zamanınızı çıkarma ve dakika sayısını döndürür. Eğer GMT-8 yaşıyorsanız Yani, 480 dönecektir.

Ayrıca 60 sayısı ile saat böl yerleştirirsek, işaret neye ihtiyacınız ters olduğunu fark - bu hesaplama oluyor GMT senin saat dilimi GMT ofset olmayacağım zaman dilimine gelen ofset. Bunu düzeltmek için, sadece -1 ile çarpın.

Ayrıca unutmayın W3School diyor ki:

döndürülen değer çünkü Yaz Saati kullanmanın pratik bir sabit değildir.

Cevap 27/11/2009 saat 18:52
kaynak kullanıcı

oy
174

Etrafa gördüğüm zaman dilimini belirleyen en popüler (== standart?) Yolu basitçe edilir kullanıcıları kendilerini soran. Web siteniz abonelik gerektiriyorsa, bu kullanıcıların profil verileri kaydedilir olabilir. Anon kullanıcılar için, tarih UTC veya GMT ya da bazı gibi gösterilecektir.

Ben bir çokbilmiş olmaya çalışmıyorum. Bazen bazı problemler herhangi bir programlama bağlamı dışında ince çözümler var oluşu.

Cevap 03/08/2008 saat 20:30
kaynak kullanıcı

oy
77

HTTP şartnamede dahil etmeyi önerilmesine rağmen bugüne kadar müşterilerine dilimini bildirir hiçbir HTTP üst bulunmamaktadır.

Ben olsaydım, muhtemelen clientside JavaScript kullanarak dilimini alıp sonra Ajax veya bir şey kullanarak sunucuya göndermek için çalışacaktı.

Cevap 01/08/2008 saat 13:19
kaynak kullanıcı

oy
47

JavaScript müşterinin yerel saati almak için en kolay yoludur. Bir kullanarak öneririm XMLHttpRequestyerel saat geri göndermek ve bu başarısız olursa, IP adreslerine dayanılarak tespit geri saat dilimine düşer.

Bildiğim kadarıyla coğrafi konum olarak, ben kullandım MaxMind GeoIP çeşitli projeler üzerinde ve onlar saat dilimi verileri sağlamak emin değilim gerçi o iyi çalışıyor. Bu ödemek bir hizmettir ve onlar veritabanına aylık güncellemeleri sağlamak. Bunlar bazı web dilde sarmalayıcılarını sağlarlar.

Cevap 01/08/2008 saat 16:11
kaynak kullanıcı

oy
39

İşte tarayıcı olduğu zaman dilimini belirlemek için sağlam bir JavaScript çözümdür.

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

https://bitbucket.org/pellepim/jstimezonedetect

Cevap 06/08/2012 saat 22:22
kaynak kullanıcı

oy
34

İşte daha kapsamlı bir yoldur.

  1. zaman dilimi kullanıcı için ofset alın
  2. onlar DLS kullanan bir bölgede olup olmadığını belirlemek için DLS sınırları birkaç gün test edin.

Aşağıda hariç:

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

Alma TZ ve DST JS dan (The Way Back Machine ile)

Cevap 30/03/2011 saat 21:48
kaynak kullanıcı

oy
26

Unkwntech yaklaşımını kullanarak, jQuery ve PHP kullanarak bir fonksiyon yazdım. Bu test edilir ve çalışır!

Eğer bir değişken olarak dilimini sahip olmak istiyorum PHP sayfasında, yere sayfanın üst kısmındaki Bu kod parçacığını vardır:

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

Bu şimdi oluşturmak üzere olduğunuz oturum değişkeni "zaman", okuyacaktır.

Aynı sayfasında Giriş, sen her şeyden önce ihtiyaç jQuery şunlardır:

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

Ayrıca, jQuery altında, bu yapıştırın:

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

Olabilir veya fark olmayabilir, ancak gerçek etki alanına url değiştirmeniz gerekir.

Son bir şey. Muhtemelen halt timezone.php olduğunu merak ediyor. (Yeni bir dosya adı verilen oluşturun: Eh, basitçe şudur timezone.php yukarıdaki url ile kendisine ve gelin)

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

Bu düzgün çalışırsa, ilk, sayfayı yüklemek JavaScript yürütmek ve sayfayı yeniden yükleyecektir. Daha sonra $ zaman dilimi değişkeni okuyabilir ve zevk için kullanmak mümkün olacak! Mevcut UTC / GMT saat ofset dilimini (GMT -7) ya da her türlü zaman dilimi içinde bulunduğunuz döndürür.

Cevap 09/04/2011 saat 20:16
kaynak kullanıcı

oy
18

Birincisi, JavaScript Saat dilimi algılama kusurlu olduğunu anlıyoruz. Yerel alabilirsiniz ofset saat dilimini kullanarak belirli bir tarih ve saat için getTimezoneOffsetbir örneği üzerinde Datenesne, ama bu tam olarak aynı değil IANA saat diliminde gibi America/Los_Angeles.

gerçi çalışabilir bazı seçenekler vardır:

  • Modern tarayıcıların çoğu kendi uygulanmasında IANA saat dilimlerini destekleyen ECMAScript Uluslararasılaşma API bunu yapabilirsiniz, böylece:

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

    sonuç kodu çalıştığı bilgisayarın IANA saat dilimi ayarını içeren bir dizedir.

    Desteklenen ortamlar listelenmektedir Intl uyumluluk tablosunda . Expand DateTimeFormatbölümü ve adlandırılmış özellik bakmak resolvedOptions().timeZone defaults to the host environment.

  • Böyle eski internet tarayıcıları gibi ortamlardan, bir geniş kümesini desteklemek için gerekirse, bir yapmak için bir kütüphane kullanabilirsiniz tahminde saat diliminde. İlk deneyerek işe IntlSunulursa, API ve müsait değil, onlar sorguya getTimezoneOffsetişlevini Datebir iç veri setinden uygun bir zaman dilimini seçmek için sonuçlarını kullanarak, zaman içinde birkaç farklı noktalar için, nesne.

    Hem jsTimezoneDetect ve moment-zaman dilimi bu özelliğe sahip.

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

    Her iki durumda da sonuç sadece bir tahmin olarak düşünülebilir. tahminim birçok durumda doğru olmayabilir, ama bunların hepsi olabilir.

    Ayrıca, bu kütüphaneler periyodik birçok eski JavaScript uygulamaları sadece farkında olduğu gerçeğini karşı koymak güncelleştirilmesi gereken akım kendi yerel saat dilimi için zaman kural ışığından yararlanma. Burada bu konuda daha fazla ayrıntı.

Sonuçta, daha iyi bir yaklaşım aslında kendi saat dilimine için kullanıcı istemektir. Onlar değiştirebileceğini bir ortam sağlamaktadır. Bir seçmek için yukarıdaki seçeneklerden birini kullanabilirsiniz varsayılan ayarı, ama imkansız senin uygulamasında söz konusu sapma yapmazlar.

Tamamen farklı bir yaklaşım da var değil tüm kullanıcının bilgisayarının saat dilimi ayarı güvenerek. Enlem ve boylam koordinatlarını toplayabilir eğer yerine, kullandığınız bir zaman dilimine olanlar çözebilir Bu yöntemlerden birini . Bu mobil cihazlarda iyi çalışır.

Cevap 25/03/2014 saat 04:47
kaynak kullanıcı

oy
18

AJAX istekleri bir HTTP başlığı olarak ofset dilimini göndermek için jQuery

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

Ayrıca kullanarak gerçek zaman dilimi adını almak için benzer bir şey yapabilirsiniz moment.tz.guess();dan http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

Cevap 13/09/2012 saat 03:05
kaynak kullanıcı

oy
18

Hala zaman dilimini alır burada detaylı bir cevap görmedim. Sen bir ofset IP adresine göre geocode veya kullanım PHP (lol) veya yanlış tahmin etmek gerekmez.

Öncelikle bir zaman dilimi sadece GMT ofset değil. Zaman kuralları yerel standartlarına göre ayarlandığı arazinin bir alandır. Bazı ülkeler ışığından ve farklı zamanlarda DST açılacaktır. Fiili dilimini almak için genellikle önemli değil, sadece akım ofset.

Bu zaman dilimini saklamayı düşünüyorsanız, kullanıcı tercihleri ​​örneğin sen bölgeyi istiyor ve sadece ofset değil. Gerçek zamanlı dönüşüm için çok önemli değildir.

Şimdi, bu kullanabilirsiniz javascript ile saat dilimini almak için:

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

Ancak daha kolay basitçe Olsen biçimlendirilmiş dilimini döndüren bu sağlam eklenti kullanmak bulundu:

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

Cevap 30/08/2012 saat 06:08
kaynak kullanıcı

oy
16

Kolay, sadece JavaScript kullanmak getTimezoneOffsetşöyle işlevi:

-new Date().getTimezoneOffset()/60;
Cevap 27/05/2012 saat 18:25
kaynak kullanıcı

oy
16

PHP tarih fonksiyonu ile site üzerinde bulunduğu sunucunun tarih saat alacak. kullanıcının zaman almak için tek yol JavaScript kullanmaktır.

Siteniz kaydı ardından gerekli olması halinde Ama size önermek, en iyi yolu kullanıcı sormak ise zorunlu alan olarak tescil. Sen kayıt sayfasında çeşitli zaman dilimleri listelemek ve veritabanında olduğunu kaydedebilirsiniz. Bundan sonra siteye kullanıcı giriş o zaman kullanıcıların seçilen zaman dilimine göre o oturum için varsayılan saat dilimini ayarlayabilirsiniz eğer. PHP fonksiyonunu kullanarak herhangi belirli zaman dilimi ayarlayabilirsiniz date_default_timezone_set. Bu kullanıcılar için belirtilen zaman dilimini ayarlayın.

Temelde kullanıcıların zaman dilimi istemci tarafında gider, bu yüzden bunun için JavaScript kullanmalıdır.

Aşağıda PHP ve JavaScript kullanarak kullanıcıların saat dilimini almak için komut dosyasıdır.

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

Ama benim açımdan gereği, bu kaydı projenizde zorunlu ise kullanıcılara sormak daha iyidir.

Cevap 16/09/2010 saat 06:59
kaynak kullanıcı

oy
16

Herkes coğrafi yeri IP maç olacak herhangi hizmetlerin biliyorum

Eh, senin için şanslı cevabın bizim çok kendi stackoverflow web sitesinde bulunabilir: Nasıl belli bir IP'ye göre Ülke alınır?

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

Cevap 04/08/2008 saat 12:11
kaynak kullanıcı

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

basitçe zaten kullanıcının dilimini bilir javascript Bu işlevin, UNIX Zaman Damgası formatında kez sağlarlar.

bunun gibi:

php:

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

bu her zaman kişinin bilgisayar saati belirledi saat dilimine bağlı doğru kez gösterecektir, kimseye bir şey sorabilir ve yerlere kaydetmek gerek tanrı teşekkür ederim!

Cevap 28/08/2011 saat 00:00
kaynak kullanıcı

oy
14

kesin konumunu (ve Hense dilimini) belirlemek için IP adresini kullanmayın - NAT, Vekil (giderek daha popüler) ve VPN ile, IP adresleri mutlaka gerçekçi kullanıcının gerçek konumunu yansıtmamaktadır nedeni de, ancak konum hangi sunucularında uygulayan bu protokoller bulunur.

Alan Kodları artık yararlı bir telefon kullanıcısı bulmak için ne kadar benzer şekilde, Numara Taşınabilirliği popülerlik verilen.

IP ve yukarıda gösterilen diğer teknikler için yararlı olan bir varsayılan öne kullanıcı / doğru ayarlayabilir.

Cevap 02/01/2013 saat 19:05
kaynak kullanıcı

oy
14

Sihirli tüm gibi görünüyor

visitortime.getTimezoneOffset()

Sorun değil, bu konuda bilmiyordum. IE, vb çalışır mı? AJAX için JS kullanmak gerekir Oradan, ne olursa olsun çerezler ayarlayabilir. Muhtemelen çerez rotada kendim giderdim.

Kullanıcı olsa değiştirmesine izin gerekir. Biz süre önce bu a yapmak (MaxMind yoluyla), coğrafi konumu kullanmak çalıştı ve makul sıklıkla yanlış - yaptığını değmez yapmak için yeterli, bu yüzden sadece kullanıcı profilinde bunu ayarlayalım ve kullanıcılara bir uyarı sergileyenler henüz onların belirlemediniz.

Cevap 03/08/2008 saat 21:40
kaynak kullanıcı

oy
11

bunu yapmak için basit bir yolu kullanmaktır:

new Date().getTimezoneOffset();
Cevap 01/12/2011 saat 12:08
kaynak kullanıcı

oy
11

Kullanacağınız edersek OpenID kimlik doğrulaması için, Basit Kayıt Uzatma doğrulanmış kullanıcılar için problem (Sen tz sayısal dönüştürmek gerekir) çözecek.

Başka bir seçenek kullanıcı arayüzünün ülke tercihinden saat dilimini anlaması olacaktır. Bu (tr için çalışmaz) biraz ham yöntemidir, fakat iyi bir yaklaşım sağlar.

Cevap 30/08/2008 saat 10:29
kaynak kullanıcı

oy
10

İşte belirlemek ve bir ASP.NET (VB.NET, C #) uygulamasında yerelleştirilmiş zaman nasıl kullanılacağı açıklanır (kaynak koduyla) bir makale:

Bu zamanla ilgili

Kısacası, açıklanan yaklaşım JavaScript dayanıyor getTimezoneOffsetoturum çerezinin kaydedilir ve GMT ve yerel saat arasındaki zaman değerlerini ayarlamak için kod arkasına tarafından kullanılan değer döndüren fonksiyonu. Güzel bir şey kullanıcı (kod otomatik olarak yapar) saat dilimini belirtmek gerekmez olmasıdır. Orada (Ben yazıya bağlantı bu yüzden) daha karmaşık ancak verilen kod gerçekten kolay hale getirir. Sana (sürece ASP.NET anlıyorum gibi) PHP ve diğer dillere mantığı dönüştürebilirsiniz şüpheleniyoruz.

Cevap 25/05/2010 saat 01:11
kaynak kullanıcı

oy
8

Basit olan JSve PHP:

Onun dahili saat ve / veya saat dilimine i bugüne kadar bulunmuş en iyi şekilde, kullanıcı dalaşamaz ofset almak olsa da, hala new Date().getTimezoneOffset();. Onun non-invazif, baş-ağrıları vermek ve üçüncü şahıslara itimat ihtiyacını ortadan kaldırır gelmez.

Bir tablo olması demek usersbir alan içeren date_created int(13)UNIX zaman depolanması için;

Bir müşteri varsayarsak creates a new account, veri tarafından alındığında postve ben gerek müşterinin Unix zaman damgası, değil sunucunun ile.insert/updatedate_created column

timezoneOffset ekleme / güncelleme sırasında gerekli olduğundan, istemci, böylece oturumları ve / veya çerezleri saklamak ihtiyacını ortadan kaldırarak, formu gönderdiğinde fazladan $ _POST unsuru olarak geçti ve hiçbir ek sunucu ya vurur.

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;

Sunucu alır ki tzoolarak $_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);

/ Güncelleme yerleştirin date_created=$user_timestamp.

DATE_CREATED alırken, bunu böyle damgası dönüştürebilirsiniz:

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

Bir eklenmesi söz konusu olduğunda Şimdi, bu örnek, kişinin ihtiyaçlarına uygun olabilir firstek bir zaman damgası veya masaya geldiğinde damgası ... u ileride başvurmak üzere kullanıcıların tabloya tzo değerini ekleyerek veya ayarlamayı dikkate almak isteyebilirsiniz oturum olarak veya bir çerez olarak.

PS AMA hangi kullanıcı geçecek ve saat dilimleri geçiş yapıp. GMT + 4 adresinde Kayıtlar, tekrar GMT-1 ve günlüklere çabuk yayılıyor. Son giriş gelecekte olacaktır.

Bence çok fazla düşünmek ... düşünüyorum.

Cevap 15/09/2014 saat 02:19
kaynak kullanıcı

oy
7

Bu php kodu deneyin

<?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'];
?>
Cevap 30/07/2012 saat 09:08
kaynak kullanıcı

oy
7

Ben bunu nasıl burada. Bu kullanıcının yerel saat diliminde PHP öntanımlı zaman dilimini ayarlar. Sadece tüm sayfaların üstünde aşağıdaki yapıştırın:

<?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
?>
Cevap 28/01/2012 saat 09:21
kaynak kullanıcı

oy
6

Olası bir seçenek kullanmaktır Datetanımlanan başlık alanı, RFC 7231 ve saat dilimini içerir gerekiyordu. Tabii ki, değer gerçekten müşterinin zaman dilimi olduğunu garanti edilmez, ancak uygun bir başlangıç noktası olabilir.

Cevap 09/09/2014 saat 00:25
kaynak kullanıcı

oy
5

PHP geçerli TZ Veritabanı zaman diliminin adını iki adımlı bir işlemdir:

1) Javascript ile zaman dilimi boyunca dakikada ofset olsun getTimezoneOffset. Öncesinde ise mahsup Bu, yerel saat dilimi UTC arkasında ise pozitif ve negatif olacaktır. Yani dengelemek için karşıt belirti eklemelisiniz.

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

Bu PHP ofset geçirin.

2) PHP bu ile geçerli bir saat dilimi adı içine ofset dönüştürmek timezone_name_from_abbr fonksiyonu.

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

Bunun üzerine bir blog yazısı yazdım: http://usefulangle.com/post/31/detect-user-browser-timezone-name-in-php Aynı zamanda bir demo içerir.

Cevap 10/01/2017 saat 11:56
kaynak kullanıcı

oy
5

Birlikte istemcide yapabileceğini an-saat dilimine ve sunucuya değer göndermek; örnek kullanım:

> moment.tz.guess()
"America/Asuncion"
Cevap 13/09/2016 saat 06:19
kaynak kullanıcı

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