PHP birincil dili olduğunda, bir SQL Server veritabanında tarih / süreleri depolamak için tercih edilen biçimi nedir?

4 Cevap php

Ben bir MSSQL veritabanında tarih / süreleri depolamak için gereken bir PHP uygulama planlıyorum. (Meraklı için, bir takvim uygulaması.) Bu bilgileri depolamak için tercih edilen biçimi nedir?

MSSQL veritabanında kendisi iyi çalışıyor ve çok okunabilir kendi datetime veri türü vardır. UNIX zaman damgası - Ancak, PHP'nin tercih biçimine datetime değerleri çevirmek için herhangi bir MSSQL işlevleri yok. Bu biraz daha acı PHP ile kullanmak için yapar. Bu PHP ne seviyor çünkü UNIX zaman damgası çekici, ama kesinlikle olarak okunabilir değil ve Nice bir demet yok yerleşik MSSQL fonksiyonları verilerle çalışmak için.

Eğer yan tarafından iki biçimleri tarafı olarak, ya da tamamen başka bir şey olarak, (int, bigint, veya varchar veri türü gibi) UNIX damgaları gibi, datetime veri türü olarak bu bilgileri saklamak istiyorsunuz?

4 Cevap

Ben onların sonuna kadar T-SQL Tarih manipülasyon fonksiyonlarını kullanarak yardımcı olmak, MS-SQL formatında tarihlerini saklamak istiyorsunuz. Yazmak ve okumak daha kolay

SELECT * FROM Foo
WHERE DateDiff(d,field1,now()) < 1

Denemek ve tamsayılar manipüle ederek eşdeğer işlemi gerçekleştirmek için daha

Bir unix zaman damgası kullanımı datediff bir MsSQL tarih dönüştürmek için:

SELECT DATEDIFF(s,'1970-01-01 00:00:00',fieldName) as fieldNameTS
FROM TableName
WHERE fieldName between '10/1/2008' and '10/31/2008'

Bir MsSQL Tarih içine bir Unix zaman damgası dönüştürmek için, PHP bunu ya:

$msSQLDate = date("Y-m-d H:i:s", $unixDate );

veya MsSQL içinde

INSERT INTO TableName ( 
  fieldName
) VALUES (
  DATEADD(s,'1970-01-01 00:00:00', ? ) 
)

parametre, bir int ($ unixDate)

I herhangi bir db motor, db doğal türü tüm tarihler için yaptığım gibi aynı tavsiye ederim. (DATETIME)

Php eklemek için: date('Y-m-d H:i:s', $myTimeStampInSeconds); Sadece ": MM SS YYYY-AA-GG SS" kullanımı

Düzenleme aşağıda yorumlarına cevap -

  1. Seçili sütunlar için size $timestamp = strtotime ($ yourColumnValue) kullanabilirsiniz;
  2. Daha sonra, vb) (DATEADD gibi SQL tarih / saat işlevlerini kullanarak kayıtları karşılaştırmak için SQL kullanabilirsiniz çünkü ben databas yerel formatında saklamak tavsiye

Merhaba ve herkes için iyi bir gün

Evet, db en iyi yolu, mağaza tarihler şu olabilir, onlar db biçimini alacak ve wich gibi ihtiyacınız olduğunda biçimlendirebilirsiniz

Ama ISO 8601 ortalama ISO-gelişmiş uluslararası tarih formatta başka bir çözüm vardır.

ISO (ISO 8601) tarafından tanımlanan uluslararası biçimi aşağıdaki gibi sayısal bir tarih sistemi tanımlayarak tüm tarih sorunları çözmek için çalışır: YYYY-AA-GG nerede

YYYY is the year [all the digits, i.e. 2100] MM is the month [01 (January) to 12 (December)] DD is the day [01 to 31] depending on moths :P

Sayısal tarihleri ​​kullanarak bu perfect.But ISO tarih biçiminde, ancak, evrensel (ve doğru) anlaşılabilir bir tarih gösterimi için en iyi seçimdir değildir okunabilirlik ve kullanılabilirlik ile ilgili olarak da bazı tuzaklar var.

Bu biçim de timezone bilgi ile, kesin tarih ve saati göstermek için kullanılan unutmayın

İşte ISO 8601:2000 hakkında detaylı bilgi

http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/date_and_time_format.htm

With no more.... Bye bye

This yardımcı olabilir. Ya da this.

Sadece veritabanı kendi datetime biçiminde tarih depolamak ve gerektiğinde dönüştürmek.