2014-09-04 29 views
5

farklı sonuçlar bunu ayarlamak nasıl bağlı olsun. Burada PHP DateTime Timezones Setter yöntemle vs Oluşturucu PHP <code>DateTime</code> sınıfını kullanarak ve bir <code>DateTimeZone</code> kurmayı deneyin

bir örnek:

$date = '2014-08-01' 

$dateTimeOne = new DateTime($date, new DateTimeZone('America/Los_Angeles')); 
echo $dateTimeOne->format('Y-m-d\TH:i:sP'); 
// 2014-08-01T00:00:00-07:00 

$dateTimeTwo = new DateTime($date); 
$dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo $dateTimeTwo->format('Y-m-d\TH:i:sP'); 
// 2014-07-31T17:00:00-07:00 

Ayrıca bkz http://3v4l.org/LrZfM

Etrafa baktım ve php docs: datetime.settimezone ve kitapta şu yorum dışındaki bu özel davranışı hitap yeterli bir açıklama bulamadım php|architect's Guide to Date and Time Programming: Dealing with Timezones - DateTimeZone.

Açıklama, DateTime::setTimezone yönteminin saat dilimini belirli bir zaman dilimi (bir zaman damgası) olarak değiştireceğini, ancak Unix zaman damgasının değişmediğini belirtir.

Diğer taraftan DateTime::__construct DateTimeZone parametresi "geçerli varsayılan saat dilimini bir kullanıcı tanımlı bir taneyle üzerine yazmak için" Chapter 3: Dealing with Timezones - DateTimeZone kullanılır. Bunların dışında

(ı bulmak mümkün olduğunu) Konuyla ilgili pek bir şey yok. Ben ne zaman kullanmalıyım dilimini

  • ayarlamak için DateTime::__construct ne zaman kullanmalıyım saat dilimleri
  • ayarlamak için şu iki yoldan

    • Daha açıklama:

      Bu

      Ben öğrenmek istiyorum ne DateTime::setTimezone zaman dilimine
    • birlikte bunları kullanmanın diğer bir karşı bir ya da nasıl kullanılmasının bir sinyal vermek
  • +2

    yapıcı bir zaman dilimi olması $ date' bu zaman dilimine olan 'anlamına gelir; Bir saat dilimi ayarlandığında, tarih, yapım aşamasında saat dilimi ile verilen satır arasındaki farka göre hareket eder. –

    cevap

    1

    Bu normal bir davranıştır.

    yapıcı metotta dilimini belirtmeyen

    , varsayılan saat dilimi date_default_timezone_set kullanılarak ayarlanır ne yani, kullanılan().

    sonra çağrı

    :

    $dateTimeTwo->setTimezone(new DateTimeZone('America/Los_Angeles')); 
    

    Yeni diliminin içine varsayılan saat diliminde belirlenen tarih taşır.


    1) (kurucu) 'tane /'
    2) (setter ayarlanan tarih) varsayılan saat diliminde belirlenen tarih, 'tane /'


    Kişisel varsayılan Taşınma Tarihi Saat dilimi muhtemelen UTC veya yakın bir şeydi. Bilgisayarın, 2014-08-01’i UTC’de ayarlamasını söylediniz. Ardından, 7 saat önce olan 'America/Los_Angeles' zaman dilimini değiştirmeyi ve böylece tarihi saat 17: 00'de 2014-07-31 olarak değiştirmeyi tercih ettiniz.

    İlgili konular