Dilimleri ve DST için ayarlanması

4 Cevap php

Benim web sitesinde, kullanıcıların geçerli saatle için tercihleri ​​ayarlayabilirsiniz. Benim veritabanında tarihsaat bir grup var, ama onlar ne zaman dilimi) A verilen, uygun şekilde her zaman göstermek istiyorum, ve B) olsun ya da olmasın Gün Işığından etkindir.

Bu konuda gitmek için en iyi yolu nedir?

4 Cevap

Bu bir kaç aşamalı bir süreçtir.

  1. Kullanıcıların Olson timezone database kendi saat dilimini seçmek için izin. Eğer Linux veya diğer Unix'lerde iseniz muhtemelen zaten makinede yüklü.

  2. UTC olarak mağaza all tarihleri ​​ve saatleri. İstisna yok.

  3. Kullanıcı bir sayfa istediğinde, o kadar yük ve bir zaman biçimlendirmek gerektiğinde, kullanıcının saat dilimi tercihlerini kullanmak ve zaman dilimi-farkında biçimlendirme işlevlerini kullanın. PHP ve Python hem de mantıklı bir şekilde tarihleri ​​ve süreleri depolamak için yollar var.

    Eğer sadece bir isteği bir zaman dilimini kullanacak eski kodla çalışıyorsanız Haluk has a good example of how to use PHP's DateTimeZone. Ancak, bu gibi bir şey kullanabilirsiniz; ben düzgün timezones görüntülemek için punbb özelleştirilmiş zaman buydu (I beri oradan hareket ettik ...)

    /**
     * Sets up the timezone system. $timezone is the timezone. In PunBB, this is
     * called by setup_dates($pun_user['timezone']) in common.php.
     *
     * DON'T USE THIS unless you can't use PHP's DateTime module.
     */
    function setup_dates($timezone) {
        if(function_exists('date_default_timezone_set')) {
            date_default_timezone_set($timezone) ;
        } else {
            putenv('TZ='.$timezone) ;
        }
    }
    

    Python, ayrıca zaten sunucuda yüklü olmalıdır pytz kütüphane, (yine, nix * varsayarak) kullanın. Değilse, (dağıtımları genellikle yerleşik dilimi veritabanının kapalı çalışmak için özelleştirmek) yüklemek için sistem yöneticisinin isteyin, ya da dönüşümlü olarak sadece easy_install kullanarak yükleyin. pytz büyük sağlayan usage examples. Sen astimezone yöntemi kullanmak isteyeceksiniz:

    >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
    >>> loc_dt = utc_dt.astimezone(eastern)
    >>> loc_dt.strftime(fmt)
    '2002-10-27 01:00:00 EST-0500'
    

    Kullanıcıların okumak için, her seferinde bunu yapın, bir süre biçimlendirmek.

Biz kullanıcının zaman dilimi için ayarlar bir tarih biçimlendirme yöntemi / işlevini kullanın. Tarih / kez bizim yerel saatine (PST) depolanır ve uygun dönüştürülür.

Ben unix damgalarını kullanarak GMT şeyi saklamak diğer sistemleri gördüm. Hala kullanıcının zaman dilimi dönüştürmek gerekir.

Benim veri sorgulayabilir zaman aşağıdaki PHP komut dosyasını kullanın

<?  while($row = mysql_fetch_array($registration)){ 

  $dt_obj = new DateTime($row['message_sent_timestamp']." UTC");
  $dt_obj->setTimezone(new DateTimeZone('Europe/Istanbul'));
  echo $formatted_date_long=date_format($dt_obj, 'Y-m-d H:i:s'); } ?>

Sen mevcut php timezones Burada biriyle DateTimeZone değerini değiştirebilirsiniz:

MySQL sunucuda UTC olarak yerli tarih / saat türleri depolayan ve bağlantı başına temelinde diğer dilimleri onları dönüştürür. Bir bağlantı, bir dilimini belirtmek değilse bu sunuculara zaman kullanmaya çalışır. Bu konuda daha fazla okuyabilirsiniz in the documentation. Ama yapmak gerekir:

SET time_zone = timezone;

Sorgunun başlangıcında istemci timezone veya eğer istek bağlantısı başına yapmak.