Zaman algılama tasarrufu PHP gün ışığı

oy
25

Ben 09:00 yerel saatle dünyanın neresinde alarak kullanıcılara bir e-posta göndermeniz gerekir. Sunucu İngiltere'de olduğunu. Ne yapabilirim DST olmasaydı o zaman kusursuz çalışacak her kullanıcı ve sunucunun zaman arasında bir zaman farkı ayarlanır.

İşte bunu anlatmak için bir örnek:

  • John, New York çalışır -5 saat sunucusu (UK) zaman
  • Richard Londra, İngiltere'de çalışır, böylece sunucu ile 0 saat farkı.

Sunucu belli Pazar günü 2:00 AM GMT +1 (BST) için GMT gittiğinde, ben John şimdi bir -6H zaman farkı olduğu anlamına gelir.

Bu senaryo hala sunucunun yerel saat dışında tüm kullanıcıları güncelleyerek işleyebilir, ama tüm diğer kullanıcıların / geri zaman ilerledi girdikten sonra, ben hala algılamak için bir yol gerekir zaman yaşayan kullanıcıların (saat ve tarih) İngiltere dışında (ya da olmaz) olası bir DST birine kendi yerel saati değişecektir.

Ben dünyanın diğer bölgelerinde / çıkış DST girecek zaman / biliyorum algılamak için bir PHP yöntemi gerekiyor.

Oluştur 27/05/2011 saat 17:35
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
12

Cevabım biraz değiştirilmesi: DateTimeZone :: getTransitions ne gerek yapacak gibi PHP> = 5.2 olması koşuluyla görünüyor.

belgelerinde bir açıklama Gönderen:

<?php 
$theTime = time(); // specific date/time we're checking, in epoch seconds. 

$tz = new DateTimeZone('America/Los_Angeles'); 
$transition = $tz->getTransitions($theTime, $theTime); 

// only one array should be returned into $transition. Now get the data: 
$offset = $transition[0]['offset']; 
$abbr = $transition[0]['abbr']; 
?>

Yani burada, biz tüm yapmanız gereken biz kontrol etmek istiyorum saat diliminde geçmesi ve bu zaman dilimi olduğunu ofset nedir DST / olup olmadığını biz bilebiliriz. Daha sonra şimdi e-posta göndermek istediğinizde veya değil, görmek için GMT mahsup kontrol etmek gerekir.

Cevap 27/05/2011 saat 17:40
kaynak kullanıcı

oy
23

Kendini geçiş DST tüm detayları bilmek gerekir mi? ya da sadece 09:00 verilen bir saat diliminde olduğu zaman bilmek gerekir?

Ikincisi ise, PHP sizin için bunu için işletim sisteminizin saat dilimi veritabanını kullanabilirsiniz. Strtotime () ne demek istediğini "endam" de fonksiyon oldukça iyidir:

echo strtotime("today 9:00 am America/New_York");  // prints "1306501200"
echo strtotime("today 9:00 am Europe/London");     // prints "1306483200"

Sadece birini kullandığınızdan emin olun PHP desteklenen zaman dilimlerinin .

Cevap 27/05/2011 saat 19:40
kaynak kullanıcı

oy
19

Jimmy işaret ettiği gibi sen saat dilimi geçişler kullanabilirsiniz, ancak bu <5.3 PHP üzerinde kullanılamaz. DateTimeZone olarak () argümanlarla PHP> = 5.2.2 ama getTransitions () değil mi! Burada Bu durumda DST olsun veya olmasın dahil size zaman dilimi verileri verebilir bir işlevdir.

function timezonez($timezone = 'Europe/London'){
    $tz = new DateTimeZone($timezone);
    $transitions = $tz->getTransitions();
    if (is_array($transitions)){
        foreach ($transitions as $k => $t){
            // look for current year
            if (substr($t['time'],0,4) == date('Y')){
                $trans = $t;
                break;
            }
        }
    }
    return (isset($trans)) ? $trans : false;
}

Tarih () sadece bir zaman dilimi DST içinde olup olmadığını bilmek gerekiyorsa kullanarak daha basit bir yöntem olduğunu söyledi. Örneğin Birleşik Krallık bunu yapabilirsiniz DST olup olmadığını bilmek istiyorum:

date_default_timezone_set('Europe/London');
$bool = date('I'); // this will be 1 in DST or else 0

... veya tarihe () Geçerli sunucu zaman dışında bir datetime belirtmek istiyorsanız için ikinci arg bir zaman damgası kaynağı.

Cevap 14/06/2012 saat 13:02
kaynak kullanıcı

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