2010-10-11 16 views
32

Temel olarak ihtiyacım olan şey, bir zaman ve bir saat dilimi ile sağlandığında zamanı başka bir saat diliminde döndüren bir komut dosyasıdır.Saat ve tarihi bir saat diliminden PHP'de bir zaman diliminden diğerine dönüştürün

Benim ana konuları şunlardır: Zaman dan GMT ofset almak

  • - Bir halk veritabanı bunun için kasada var?
  • Ayrıca gün ışığından yararlanma saati (DST) farklılıklarını da dikkate alır.
  • Bir PHP sınıfının içine nasıl güzelce sarılır - veya hali hazırda böyle bir sınıf var mı?

cevap

66
<?php 
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 
?> 

yukarıdaki örnekler çıktısı:

2000-01-01 00:00:00+12:00 
2000-01-01 01:45:00+13:45 

bulunan DateTime Manual on php.net

DÜZENLEME: gibi Pekka söyledi: DateTime sınıfı üzerinde 5,2'den varsa ve orada ilk bulmak zorunda Hangi yöntemlerin gerçekten uygulandığını ve hangisinin sadece 5.3'ten var olduğunu.

+3

mayın silme, yumruk bana yendi yardımcı olabilecek bu deneyin. DateTime'ın PHP 5.2'den beri mevcut olduğunu belirtmekte fayda var - 5.1 için bir yama var ama deneysel –

+0

Yep. datetime güzel "yeni" dir. 5.2'de bile, – ITroubs

+0

numaralı cevabın gerektirdiği, istenen ve bahsedilen tüm fonksiyonları içermez. Bu fonksiyonlar otomatik olarak gün ışığından yararlanma işlemlerini de gerçekleştirir, burada sadece bir ofset eklenmesi aksak ve yanlıştır. –

-1

Burada datetime'ı başka bir saat dilimine dönüştürmek için bu işlevi kullanıyorum. En iyi sonuç için, datetime saatinizi utc saat dilimine dönüştürüp gerekli zaman dilimini dönüştürürseniz daha iyi sonuç alınır.

function ConvertTimezoneToAnotherTimezone($time, $currentTimezone, $timezoneRequired) { 
    $dayLightFlag = false; 
    $dayLgtSecCurrent = $dayLgtSecReq = 0; 
    $system_timezone = date_default_timezone_get(); 
    $local_timezone = $currentTimezone; 
    date_default_timezone_set($local_timezone); 
    $local = date("Y-m-d H:i:s"); 
    /* Uncomment if daylight is required */ 
    //  $daylight_flag = date("I", strtotime($time)); 
    //  if ($daylight_flag == 1) { 
    //   $dayLightFlag = true; 
    //   $dayLgtSecCurrent = -3600; 
    //  } 
    date_default_timezone_set("GMT"); 
    $gmt = date("Y-m-d H:i:s "); 

    $require_timezone = $timezoneRequired; 
    date_default_timezone_set($require_timezone); 
    $required = date("Y-m-d H:i:s "); 
    /* Uncomment if daylight is required */ 
    //  $daylight_flag = date("I", strtotime($time)); 
    //  if ($daylight_flag == 1) { 
    //   $dayLightFlag = true; 
    //   $dayLgtSecReq = +3600; 
    //  } 

    date_default_timezone_set($system_timezone); 

    $diff1 = (strtotime($gmt) - strtotime($local)); 
    $diff2 = (strtotime($required) - strtotime($gmt)); 

    $date = new DateTime($time); 

    $date->modify("+$diff1 seconds"); 
    $date->modify("+$diff2 seconds"); 

    if ($dayLightFlag) { 
     $final_diff = $dayLgtSecCurrent + $dayLgtSecReq; 
     $date->modify("$final_diff seconds"); 
    } 

    $timestamp = $date->format("Y-m-d H:i:s "); 

    return $timestamp; 
} 

Teşekkür ederiz.

3

, bu :)

function converToTz($time="",$toTz='',$fromTz='') 
    { 
     // timezone by php friendly values 
     $date = new DateTime($time, new DateTimeZone($fromTz)); 
     $date->setTimezone(new DateTimeZone($toTz)); 
     $time= $date->format('Y-m-d H:i:s'); 
     return $time; 
    } 
İlgili konular