Ben UTC zaman / tarih için MySQl bir zaman damgası veya metin alanını kullanmalısınız

6 Cevap php

Ben bir mysql damgası sadece bazen yıl 2037. Cidden benim app, bir metin de ben alışkanlık emin değilim ama bir fikrin ne insanlar bir zaman damgası için daha sonra kullanacak, sonra etrafında olacak şüphe 19700101000000 bir değeri tutabilir okundu alan?

Aşağıda şu anda datetime mysql alanı olan bir mysql kaydı eklemek ve ben şimdi yeniden kodlama sitem duyuyorum, aşağıdaki PHP now() kullanmak ve ben dilimini sunmak için gidiyorum görebilirsiniz nasıl bir örnek Kullanıcılara doğru vakitlerini gösteren desteği yüzden UTC zaman damgası olarak tarih ve zaman kazanmak için needd.

<?PHP
$sql = "INSERT INTO online_users 
    (user_id,
    online_id,
    ip,
    datetime,
    location,
    gender) 
    values ('$cache->userid,$unid,$LOCALIP,NOW(),$location,$g)";
executeQuery($sql);
?>

Yukarıda benim kod ve benim yukarıdaki bilgilere dayanarak, nasıl UTC içine saat ve tarih eklemek için bu kodu biçimlendirmek ve ben MySQL zaman damgası alanı veya bir metin alanı kullanmanız gerekir? Sık sık gösteren zaman bazı yazılarda, örneğin ben mysql kez (2 gün ve 4 saat ve 34 saniye önce) bu yana geçen süreyi hesaplamak, benim php zaman değiştirmeniz gerekir. Ben de üzerinde imzalamak için geçtiğimiz hafta kullanıcılar gibi şeyler için sorgulamak için zaman kullanmanız gerekir. Ben sadece ben sadece bunu gibi tasarrufu olmalıdır iyi yöntemini belirlemenize yardımcı olacaktır durumunda için zaman kullanarak ne olacağını göstermek için yayınlanmıştır bu şeyler yapmak için nasıl soran değilim.

6 Cevap

Ben her şeyi bu soru / cevap olarak söz çalıştım ama hiçbir şey o bir tamsayı olarak bunları saklamak için sonunda doğru I () fonksiyonu mysql benim tarih ve süreleri ile düzgün çalışması için php dilimleri date_default_timezone_set başardı tek yolu amele ve mükemmel çalışıyor. Ben arasında kaç saniye anlamaya çünkü bir kez ben tür kimlik numarasına göre yerine ben çok zor olacağını sanmıyorum, bir tarihe göre sıralamak ama tarih benim için sıralama yavaş hiçbir sorun yoktur.

Mysql bir tamsayı alanı kullandığınızda, ben bu 1262658989 gibi bir UTC zaman damgası saklayabilirsiniz. Eğer mysql bir zaman damgası veya datetime alanını kullandığınızda, otomatik olarak o yapar bu tarz 2003-04-14 00:00:00 dönüştürmek çok zor nedense dilimleri ile çalışmak.

Bunun yerine bu kodu kullanarak PHP UTC damgası alabilirsiniz bir interger kullanma:

gmdate('U', time())

Tarihsaat saklamak için iyi bir sütun DATETIME olduğunu. Geri ve ileri tamsayı zaman damgaları her zaman dönüştürmek zorunda değilsiniz gibi, kodunuzu ve sorguları basitleştiren ve MySQL sizin için tüm tarih karşılaştırma mantığı işler.

MySQL içinde geçerli UTC timestamps almak için NOW () yerine MySQL UTC_DATE(), UTC_TIME() ve UTC_TIMESTAMP() işlevlerini kullanabilirsiniz.

Ben her zaman veritabanı alanlarında imzalı tamsayı gibi çağ / unix zaman depolamış. MySQL var UNIX_TIMESTAMP() & FROM_UNIXTIME() fonksiyonları. Ben var ve bunun için uçaksavar almaya devam edecek, ancak tarihi matematik, kolay bu tarih formatı için başvuru dil desteği neredeyse her yerde ve ben korkmadan olursa DST düzeltmeler hakkında siyasi kaprisleri operasyonel sistemler (örneğin, havayolu zamanlama bilgisi) koruyabilirsiniz Sistem / zamanı güncellemeleri.

Birkaç web siteleri bile tarih dönüştürme yapmak ve müşterinin JavaScript kendi yerel zaman o proje için izin için zahmet etmeyin.

Hemen geçen saniye sayısını sahip olarak söz süre deltalar (yani ne kadar son görünümü arasında) kolaylıkla kolaylaştırılabilir.

Bu sıralama / filtreleme daha hızlı bir metin alanında olacağını daha yapacak beri, tarihler için zaman damgası alanı kullanabilirsiniz. 26 yıl içinde, sen Y2K37 geçmiş olsun için yapmanız gereken anlamaya bize tekrar kontrol edebilirsiniz.

;-)

Eğer farklı saat dilimleri destek gerekiyorsa, tarihler için bilge seçimi sadece 2038-01-19 03:14:07, bir aralık kadar olsa bile, TIMESTAMP sütun türü olacaktır. Hala bu sorunu çözmek için nasıl düşünmek size 28 yıl verecek.

Bir TIMESTAMP sütun türünü kullanmanın yararı tüm tarihler UTC olarak kaydedilir ve istek üzerine gerekli timezone dönüştürülür olmasıdır. Bu şekilde zaman dilimleri hakkında çok fazla endişelenmenize gerek yok. Yine de, tüm sorunları çözmez.

Satır güncellenir whenerevr da alanı güncelleştirmek için ON UPDATE CURRENT_TIMESTAM P kullanabilirsiniz