php zaman doğru tarih vererek değil

7 Cevap php

Ben bazı hesaplamalar yapmak ama ben doğru zamanı almıyorum yani bir UNIX zaman damgası güncel tarih ve saati almak için arıyorum. Tarih doğru ancak zaman kapalıdır. Ben zaten bu konuda ben kayboldum benim dilimini ettik. Birisi bir el ödünç miyim?

Teşekkürler.


İşte ben kullanıyorum kod kısmı:

date_default_timezone_set('America/Los_Angeles');
echo time();

Outputs: 1256926663 which is equal to Fri, 30 Oct 2009 18:17:43 GMT.

Bu yanlıştır. Ne olması gerektiğidir: Fri, 30 Ekim 2009 10:17:43 PST


Ben düşünce olarak tamam, sorun damgası ile not olduğunu. Ben damgası yorumlamak MySQL kullanıyorum ama doğru değil. İşte kullanıyorum budur:

FROM_UNIXTIME(timestamp, '%M %D, %Y - %l:%i %p') AS timestamp

7 Cevap

Sounds like your server has a wrong time set.
PHP doesn't have it's own clock.


// edit
it looks like the time it outputs is correct.
time() function outputs:

Unix Epoch beri saniye sayısı (1 Ocak 1970 00:00:00 GMT).

This means GMT time.
What you're after is date(), which on the other hands outputs local time/date.

time () DAİMA gmt bir unix zaman damgası verir ve herhangi bir yerel ayarları yok sayar. Bir unix damga ve saygı yerel ayarlarını biçimlendirmek için tarih () kullanın.

Göre MySQL's docs, dikkat etmeniz gereken bir kaç şey vardır.

  1. CURRENT_TIMESTAMP (), CURRENT_TIME (), CURRENT_DATE (), ve FROM_UNIXTIME () işlevleri time_zone sistem değişkeninin değeri olarak kullanılabilir bağlantının geçerli zaman diliminde, değerleri döndürür.

    Yani, sorgunun sonuçları yerel isimli bağlıdır ne "yerel saatine", zaten various settings (her ikisi de bağlantı başına ve küresel).

  2. Buna ek olarak, UNIX_TIMESTAMP () argüman geçerli zaman diliminde bir datetime değeri olduğunu varsayar.

    Bunun anlamı siz veritabanına damgası eklediğinizde, ya bir argüman olmadan arayarak ya da bunu vermek tarih saat dize MySQL bu bağlantı için kendi yerel saat dilimini düşünüyor, aynı zaman dilimi değil sağlamak gerektiğidir.

Sadece veritabanından bilgi almak ve daha sonra PHP biçimlendirmek nasıl karar istediğiniz gibi görünüyor bu yana, sadece veritabanından değiştirilmemiş damgası çekin akıllıca olabilir. Sonra PHP kodu emin kullanıcıya alakalı timezone göre biçimlendirilir yapma işleyebilir.

Bana doğru görünüyor:

date_default_timezone_set('UTC');
echo date('r', 1256926663);
// Fri, 30 Oct 2009 18:17:43 +0000

date_default_timezone_set('America/Los_Angeles');
echo date('r', 1256926663);
// Fri, 30 Oct 2009 11:17:43 -0700

Eğer sunucu doğru zaman vardır ve doğru zaman dilimini belirledik o kesinlikle emin değilseniz, o zaman kesinti gücüyle Ben sadece zaman ayrıştırmak için kullandığınız hesaplamalar yanlış olduğunu varsayabiliriz.

Daha detay için yararlı olacaktır, ama yine yanlış ayarlanmış dilimini var ki bana geliyor.

http://codepad.org/BesoexCf

(Benim için bir kaç dakika kapalı, ama bu beklenen) doğru saati döndürür.

Eğer sunucu üzerinde yukarıdaki çalıştırdığınızda ne alabilirim?

NTP cini kontrol düşünün.

$ /etc/init.d/ntpd stop
$ ntpdate -q pool.ntp.org

# If it's off by much, jump it to the right time:

$ ntpdate pool.ntp.org
$ /etc/init.d/ntpd start

Emin başlar olun:

chkconfig ntpd --list

İyi şanslar!