PHP ve MySQL ile taşıma damgaları (Ben doğru benim teorim var mı?)

4 Cevap php

PHP damgaları, araştırma ve oldum MySQL. (- Timezone = kullanıcılar localtime GMT + /) Benim anlayışlarını UNIX tek bütün mesele kullanıcıların timezone dönüştürmek olduğunu olmak ... GMT var damgaları olduğunu. Ben (10 haneli uzun int gibi) ait "ham" şeklinde damgası tasarrufu ve sorguda localtime dönüştürerek tarafından başarıyla yapıyorum

$row = $result->fetchRow(DB_FETCHMODE_ASSOC); $timestamp = $row['stamp']; date_default_timezone_set('America/New_York'); echo date("d/m/y : H:i:s", $timestamp);

Bu iyi çalışması için görünür, ama bunu yapmanın "standart" yol olup olmadığından emin değilim. Bu herhangi bir deneyimi var mı?

4 Cevap

Sizin yöntem gayet iyi olduğunu :)

Muhtemelen, örneğin, bir daha küresel kapsamda dilimini isterdim ne PHP senaryo üzerinde yerine Eğer bir tarih işlevi kullanmak her zaman hatırlamak zorunda göre, oturumlar için kullanıyor. Bu da herhangi bir nedenle, fikrinizi değiştirebilir ve saat dilimleri veya bu satırlar boyunca bir şey standardize etmek istiyorsanız, eğer değiştirmek için daha kolay hale getirir.

MySQL Unix damgaları yönetmek için en iyi yolu, aslında, UNIX_TIMESTAMP () fonksiyonudur. Herhangi bir argüman olmadan UNIX_TIMESTAMP () sadece yerine gibi bir şey, yani şu anki Unix zamanını döndürür

$time=time();
mysql_query('UPDATE table SET time='.$time.' WHERE what="ever"');

Sadece doğrudan sorguda UNIX_TIMESTAMP yapışarak tamamen ekstra çalışma kesebilir:

mysql_query('UPDATE table SET time=UNIX_TIMESTAMP() WHERE what="ever"');

Daha temiz!

Ben MySQL bir datetime ya da zaman damgası alanının dilimini belirtmek için bir yol olduğunu düşünüyorum.

Yani, bir zaman dilimini kullanarak veritabanında tarih ve saati depolamak olmalı ve gerektiğinde başka dönüştürmek. Sen dönüştürme yapmak için Zend Framework Zend_Date bileşeni gibi bir şey kullanabilirsiniz.

Ben kendi kurulum yapmak zorunda, zaman dilimini ve MySQL ile oynamak için hiçbir "standart" bir yol olduğunu düşünüyorum.

Benim müşteri için, sadece tek bir zaman diliminde her bir iş yani benim PHP komut yapılacak ilk şey söylediğiniz gibi date_default_timezone_set ile dilimini ayarlamaktır. Bunu yaparken MySQL belki date_default_timezone_set kullanılan olandan başka bir zaman dilimine ayarlanmış çünkü Ancak, (ya da diğer tarih ve saat işlevleri)) (NOW işlevini kullanarak sorgu için izlemek gerekir.

The mysql-server stores dates in a timezone independent format (UTC).
But before it stores the date it will be converted using its timezone.

U bağlantısı * 1 başına mysql dilimini değiştirebilirsiniz:

mysql_query('SET time_zone = "'.$timezone.'"');

Ayrıca komut başına dilimini değiştirebilirsiniz.

date_default_timezone_set($timezone);

Eğer aynı zaman dilimine göre bunları eğer "2009-01-10 13:30:00" MySQL ve PHP hem de aynı şey demek olacaktır.

Ama 2 sunucuları farklı iç saat değerlere sahip olduğunu akılda tutmak, bu yüzden şimdiki zamana dayalı damgaları oluşturmak istiyorsanız. MySQL veya php bunu.

*1) MySQL timezone support may require additional configuration. check the manual

I putenv ile php dilimini ayarlayın. Eğer GMT kapalı tabanlı çalışma ise, bu uygulamanın geri kalanı için saat dilimini ayarlamanız gerekir. Başka çözümler muhtemelen vardır ama bu ben her zaman bir veritabanı zaman ve tarih ile çalışan değilim gibi kolay olarak buldum budur.