PHP nasıl yerel sistem saatini alabilirim?

9 Cevap php

Ben bir PHP sistemi yazıyorum ve sistem saatini almak gerekiyor. GMT saati veya bir timezone özgü zamanı, ama CRON sistem tarafından kullanılan aynı sistem zamanı değil. Ben gece yarısı her gün çalışan bir CRON iş var ve ben tekrar dolmadan ne kadar sürer, bir web sayfasında göstermek istiyorum.

For example: Right now it is 6pm on my system clock. I run the code:

$timeLeftUntilMidnight = date("H:i", strtotime("tomorrow") - strtotime("now"));

Sonuç, ancak, bunun yerine "06:00" of "03:00" dir. Ben çalıştırırsanız

date("H:i", strtotime("tomorrow"));

Bu doğru olduğunu, 00:00 döndürür. Ama çalıştırırsanız

date("H:i", strtotime("now"));

Doğru 18:00 olmalıdır bile o, 21:00 döndürür.

Teşekkürler.

9 Cevap

Birçok cevap ancak bir tane bile doğru yazma anda yoktur, vardır.

En millet inanmak gibi PHP time() fonksiyonu, sistem saatini geri dönmez, ama normalde php.ini içinde date.timezone ile ayarlamak, ya da ([{seti, PHP localtime dönmek 2)]}, bir komut dosyası içinde.

Benim sunuculardan biri, örneğin, PHP zaman UTC için Europe/Rome ve sistem zaman kuruldu. Ben sistem zaman ve PHP zaman arasında bir saatlik bir fark vardı.

Sana Linux için çalışan bir çözüm vermek için gidiyorum, ben Windows için bilmiyorum. Linux sistem zaman dilimi /etc/timezone ayarlanır. Şimdi, bu benim izin verilen open_basedir ayarı dışında normal olduğunu, ancak dosyayı okumak mümkün listenize :/etc/timezone ekleyebilirsiniz.

Sonra, sistem saatini almak istiyorum komut, üstüne, sistem timezone komut dilimini ayarlar bir kütüphane işlevini çağırabilirsiniz. Ben bu işlevi bir sınıfın parçası olduğunu varsayalım, bu yüzden statik kullanın:

static function setSystemTz() {
    $systemTz = trim(file_get_contents("/etc/timezone"));
    if ($systemTz == 'Etc/UTC') $systemTz = 'UTC';
    date_default_timezone_set($systemTz);
}

'Etc / UTC' UTC 'iken, tanınan, bu yüzden bunu düzeltmek için eğer bir eklemek zorunda değil PHP 5.3.3 madde kötü yapmak.

Şimdi mutlu time() arayabilir ve gerçekten sistem saatini verecektir. Ben şimdi bu soru bulundu neden ben kendim için gerekli çünkü, bunu test ettik, bu.

Eğer GMT saati istiyorsanız ama GMT olarak size sistem zamanını verecek, gmtstrftime() kullanmak isteyebilirsiniz. http://us2.php.net/gmstrftime daha fazla bilgi var.

Biçimlendirilmiş tarihten sonra ise:

date ('d/m/y h:i:s'); 

hile yapacak, ikinci bir parametre verilir eğer mevcut sistemi zaman varsayılan olarak bugüne içine zaman () geçmek için gerek yoktur.

Daha fazla biçimlendirme seçenekleri burada görmek için: http://php.net/manual/en/function.date.php

Aksi takdirde, sadece kullanabilirsiniz

time()

Diğerleri de söylediğim gibi, size geçerli unix zaman damgası almak için.

Sisteminizin güncel saati almak için php.ini dosyasında doğru date.timezone ayarlamanız gerekir. Örneğin Hindistan iseniz o zaman yazarsınız:

date.timezone = Asia/Calcutta

Almanya için bu olurdu:

date.timezone = Europe/Berlin

Bunu yaptıktan sonra, date("Y-m-d H:i:s") Geçerli zaman verecektir. Lütfen timezone list of timezones supported by PHP bkz almak için.

Bu birini deneyin:

$time=date("h:i:s A", strtotime("now"-14));
echo $time;

Sen numarasını 14 Yukarıdaki değiştirerek süresini ayarlayabilirsiniz.

Bu bunu yapmak için en kolay ve en kusursuz şekilde:

$sys_timestamp = strtotime(exec("date"));

En php ile onu taklit çalışalım, hadi gerçek sys zaman başlayalım ;)

(Herhangi bir Unix tabanlı sistem üzerinde çalışır mı)