PHP ve SQL zaman zaman arasındaki fark nedir?

3 Cevap php

Neden damgası PHP time() fonksiyonu SQL datetime çok farklı tarafından oluşturulur?

PHP bir date('Y-m-d', time()); yaparsanız, olması gerektiği gibi, şimdi bana zaman verir. Ben sadece time() kısmını almak ve yaparsanız:

$now = time();
//then execute this statement 'SELECT * FROM `reservation` WHERE created_at < $now'

Ben bir şey olsun. Ama hey, bu yüzden değeri $now 1273959833 oldu ve ben sorgulanan eğer

  'SELECT * FROM `reservation` WHERE created_at < 127395983300000000'

o zaman ben yarattık kayıtları görmek. Ben bir başka saniye içinde vs mikrosaniye izlenir düşünüyorum, ama ben bu konuda herhangi bir belge bulamıyorum! Ne bu ikisi arasındaki doğru dönüşüm olurdu?

3 Cevap

time() function mikrosaniye dönmez, bu yüzden doğru veri türünü kullanıyorsanız çalışması gerekir. Ama şu anda 2 farklı veri tipleri vardır, INT ve bir tarih alanı (olabilir DATE / DATETIME / TIMESTAMP). Eğer tamsayı olarak bir zaman damgası veritabanında bir tarih karşılaştırmak istiyorsanız, sizin gibi bir şey kullanabilirsiniz:

SELECT * FROM Tbl WHERE UNIX_TIMESTAMP(date) < $timestamp;

time() UNIX zaman damgası (1970/01/01 geçti saniye) verir - SQL tarihe göre yapılır biçiminde YYYY-mm-dd hh-ii-ss damgaları var () istiyor - böylece bunu yapmazsanız sadece created_at < NOW() için SQL sorgusu değiştirmek, $now = date("Y-m-d H:i:s") veya daha iyi kullanmak, 2 PHP işlevleri çağırmak istiyorum.

Onlar depolama tarihleri ​​sadece 2 farklı yolu, onların avantaj ve dezavantajları ile her konum. Sen MySQL tarih alanını kullanın, ya da sadece bir INT alanda unix damgaları saklayabilirsiniz. Da kullanabilirsiniz:

UNIX_TIMESTAMP (field_name) SELECT FROM ...

bir Unix zaman damgası olarak bir tarih alanı dönmek.

MySQL tarih alanı insan okunabilir ve öngörülebilir gelecekte herhangi bir tarihi saklayabilirsiniz. Ancak, doğru bir şekilde ele değilse, ciddi sorunlara neden olabilir timezone bilgi saklamak değil. Facebook bir süre önce bu sorunu vardı.

Unix damgaları mağaza timezone bilgisi (o 00:00 1 Ocak 1970 UTC beri saniye sayısı olarak tanımlanan beri). Karşılaştırma işlemleri tamsayılar daha hızlı ve PHP'nin zaman / tarih fonksiyonları Unix zaman damgası ile kullanılmak üzere tasarlanmıştır. Ancak, Linux sadece MySQL ve genel mimarisi uzun gelmeden önce 2038 64-bit tamsayı geçecektir. 1970-2038 1902-2038 ve Windows tarihleri ​​destekleyebilir, ama eğer uzak gelecekte ya vardır tarihlerini saklamak gerekiyorsa geçmiş, Unix zaman sizin için değil.