PHP ve MySQL arasındaki Saat dilimi farkları

2 Cevap php

PHP ve MySQL geri tarih ve zaman belirli damgaları dönüştürürken onlar kullanıyor gereken zaman dilimi katılmıyorum görünüyor sayede bir sorun için çalıştırmak.

Ben bir datetime biçimine geri dönüştürmek istiyorum bir zaman damgası varsa sorun ortaya çıkar. PHP GMT zaman dilimi olmanın temel tarih ve saati verir, ancak MySQL o GMT +1 faaliyet olduğunu düşünüyorum görünüyor, ve buna göre dönüştürür.


Simple reproduction

$original_date = '2009-08-31 23:59:59';
$timestamp = strtotime($original_date);
echo $timestamp;                                    // Gives 1251763199

echo date('Y-m-d H:i:s', $timestamp);               // PHP:   2009-08-31 23:59:59
echo db_field('SELECT FROM_UNIXTIME(1251763199)');  // MySQL: 2009-09-01 00:59:59

PHP tarafından verilen damgası dilimi GMT olduğunu varsayarak, correct one verilen tarih için gibi görünüyor. MySQL sonuç doğru biz (o zaman GMT +1 içinde düştü verilen timestamp) BST çalışan olmuştu olurdu.

Ben (1267640942), PHP ve MySQL bugün bir $timestamp ile yukarıdaki denerseniz hem 2010-03-03 18:29:02 (dönen hem de bu olduğunu söyle mutlu görünüyor GMT).


What timezone is set on the servers?

Benim dilimi işletim sisteminden daha system ayarlı ise timezone bilgi sağlayacaktır söylüyorlar the MySQL docs, hangi kontrol ettik. Bu durumda şu anda görünüyor:

mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              | 
+--------------------+---------------------+

Benim web sunucusunda varsayılan dilimi GMT. Bu aynı zamanda (her bir sunucuda cl üzerinde date komutu çalıştırmak göre) benim veritabanı sunucusunda varsayılan sistem timezone.

foo@bar:/home/foo$ date
Wed Mar 3 18:45:02 GMT 2010


So according to the docs, my DB server should be running on GMT, which is what we want. Yet the query output given in my test scripts suggests that it's running in GMT+1.

Böylece biz onu dışarı sıralamak ve herkes önleyebilir I (tüm tarih aritmetik vb, PHP ve MySQL ya da tamamen yapılıyor) bu soruna yönelik geçici çözümler vardır biliyorum ama bu tutarsızlık neden olan ne altına almak isterim başka onun tarafından takıldı olmaktan takım.

Ben buraya baktı, ya da bu tutarsızlık neden olabilir bilmek ettik çok temel bir ayar var ise herkes biliyor mu?

Teşekkürler!

2 Cevap

Ben hiç istediğiniz ne zaman dilimini (ler) yüklemek ve dönüştürmek sizin sunucu ve MySQL üzerinde UTC kullanarak öneririm. MySQL ve PHP dönüşüm oldukça basittir.

ben bu yöntemi kullanın:

take care of PHP and leave mysql alone

o date_default_timezone_set php fonksiyonu ile php için varsayılan zaman dilimini ayarlamanız tavsiye edilir.

mySql tarih kaydını tutmak için bir zaman damgası alanı türünü kullanın

daha sonra taktığınızda:

$sDate = date("Y-m-d H:i:s");
mysql_query("insert into `table` set `created_on` = '$sDate' ");

ve seçtiğinizde:

mysql_query("select `created_on` from `table` ");
$iTime = strtotime($aRow['created_on']);

Her zaman gmdate php fonksiyonunu kullanarak küresel zaman erişebilirsiniz:

$iTime_Global = gmdate("U", $iTime);

Eğer sadece PHP kodu dikkat eğer mysql saat dilimi uygulamanızda hiçbir etkisi olurdu. (Bu zaman dilimi set tarafından yapılır)