Soru - Cevap Bölümü
/ Kategori: Programlama
Merhaba,
Öncelikle böyle bir hizmet verdiğiniz için teşekkürler.
Şu anda CFMX 6.1 ve MS SQL2K kullanıyorum.
Doğum tarihi gibi bir bilgi girerken sorunlar çıkıyor. Serverin USA de olması ve formatının değişik olması nedeniyle zorluklar yaşıyorum.
Giriş formatında AY, Gün ve yılı seçip girmek sanırım en sağlıklı yöntem. Bunda da sorun 30 Şubat gibi durumlarda çıkıyor. Bunu kontrol eden ve bu formatta giriş yapmayı kolaylaştıracak örnek kod arıyorum.
ilginize şimdiden teşekkürler.
Cevaplar
( Faydalı Cevapları Göster )
sevgili Yilmaz
cevap için teşekkürler. ancak ben tam olarak ne istediğimi soramadım. istediğim gün için ayrı, ay için ayrı ve yıl için ‘pull down’ şeklinde tarih girilmesi.
<cfset setLocale("tr_TR")>
<cfset tarih = CreateDate(FORM.YIL, FORM.AY, FORM.GUN)>
<cfoutput>#LSDateFormat(tarih,"DD MMMM YYYY")#</cfoutput>
çıktı (1982,12,07)
07 Aralık 1982
Ya aslında boşuna geveezlik yapıyorum. http://livedocs.macromedia.com/coldfusion/ adresinde bunlar ile ilgili örnekleri bulabilirsin.
CreateDateTime()
CreateDate()
CreateTime()
DateAdd()
Ben de ilave olarak ve genişçe şunları söyleyeyim, hem böylece bu forumu okuyan diğer arkadaşlara yardımcı olabilirim:
Evet bu tarih ve saat işlemleri tüm platformlar ve diller için bir biraz karışıktır maalesef. Fakat ColdFusion’da bazı kurallara dikkat ettiğimizde tüm veritabanları ve locale ayarları için problemsiz ve standart yöntemler bulunmaktadır.
1. SQL’lerde tarihleri nasıl kullanmalıyız
select sorgularında tarih, tarih/saat alanlarını getirirken alan adını doğrudan yazıp getiririz, herhangi bir fonksiyon kullanmaya gerek yok. Veritabanları tarih/saat değerlerini tablolarda sayısal olarak tutar, select ile çekerken veritabanının locale ayarları dikkate alınır, fakat bazı veritabanları ColdFusion’un veya ODBC’nin locale ayarlarını dikkate alabilir.
Normal kullanıma örnek: select dogum_tarihi from uye
where şartlarında ise eğer örneğin doğum tarihi şu olanlar gibi bir işlem yapmak istiyorsak, bir başka değişle tarih değerini parametrik yapmak istiyorsak <cfqueryparam> etiketini kullanmalıyız (mutlaka her zaman <cfqueryparam> kullanın, hem güvenlidir, hem sağlıklıdır). Örnek:
...
select * from uye where dogum_tarihi = <cfqueryparam cfsqltype='cf_sql_date' value='#lsParseDateTime(form.dogumTarihi)#' />
...
Bu örnekte lsParseDateTime bir stringi ColdFusion’un stardart tarih/saat formatına çevirmektedir, cfsqldate ise saat kısmını kırpıp veritabanına sadece tarihin kaydedilmesini sağlar.
lsParseDateTime fonksiyonuna neden gerek var peki? Eğer bu fonksiyon kullanılmazsa
<cfqueryparam>
stringi otomatik olarak standart tarih formatına çevirir fakat bu çevirmede US standartlarını kullanır, ve bu da gün ay karışıklıklarına yol açabilmektedir.
lsParseDateTime ise setLocale ile ayarlamış olduğumuz locale’i dikkate alır. Fakat eğer tarihi gün-ay-yıl listeleri ile ayrı ayrı stringlerden alıyorsanız lsParseDateTime yerine
CreateDate(form.dogumYili, form.dogumAyi, form.dogumGunu) kullanmanız gerekir.
Tarih/saat içinörnek:
...
select * from uye where kayit_tarihi = <cfqueryparam cfsqltype='cf_sql_timestamp' value='#now()#' />
...
value’ya değeri now() ile üretip verdik, onun yerine yukarıda anlattığımız duruma göre lsParseDateTime ya da CreateDateTime kullanabiliriz.
2. Sayfalarda tarihleri nasıl görüntüleriz:
Veritabanında select ile bir tarih alanını getirdiğimizde geriye dönen değer Coldfusion tarafından otomatik olarak algılanır.
Bu yüzden gelen değeri tarihe çevirmeden DateFormat fonksiyonu ile uygun formatta ekrana yazdırmak yeterlidir, ColdFusion bu durumda veritabanından getirilmiş değeri otomatik olarak kendi tarih standartına çevirecek sonra belirttiğimiz formatta ekrana yazacaktır. (Eğer ColdFusion otomatik olarak çevirmede sorun oluşturursa muhtemel olarak veritabanı locale ayarlarını gözden geçirmeliyiz. Eğer bu da bir sonuç vermezse yine lsParseDateTime fonksiyonunu kullanmalıyız) Örnek:
<cfoutput>#lsDateFormat(uyeBilgileri.dogum_tarihi,'dd.mm.yyyy')#</cfoutput>
3. Formlarda tarihler:
Formlardan tarihleri almak için ya basit bir textbox kullanıp kullanıcının istenen bir formatta tarihi o metin kutusuna yazmasını isteriz. Ya da gün ay yıl listeleri kullanırız.
Eğer metin kutusu kullanırsak formdan aldığımız değeri lsParseDateTime ile ColdFusion tarih/saat standartına çevirmeliyiz. Listeleri kullanıyorsak CreateDate fonksiyonunu kullanmalıyız.
Metin kutusunda tarihi önceden yazılı olarak getirmek için:
<input type='text' name='dogumTarihi' value='<cfoutput>#lsDateFormat(uyeBilgileri.dogum_tarihi,'dd.mm.yyyy')#</cfoutput>
'/>
Listelerde seçili hale getirmek için ise <cfloop> ve <cfif> kombinasyonlarını kullanabiliriz. Gün için bir örnek yazayım:
<select name='dogumGunu'>
<cfloop from='1' to='31' index='gun'>
<option value='<cfoutput>#gun#</cfoutput>'<cfif gun eq day(uyeBilgileri.dogum_tarihi)> selected</cfif>><cfoutput>#gun#</cfoutput></option>
</cfloop>
</select>
Uzun oldu ama bir çok kişiye yararlı olmuştur umarım.
iyi çalışmalar.
Teşekkürler.
Uzun oldu ama bir çok kişiye yararlı olmuştur umarım. iyi çalışmalar.
Zaman ayırıp son derece detaylı olarak açıkladığın için teşekkürler Murat.
Son derece yararlı oldu.
Takip edebileceğimiz bir Blog’un varmı acaba?
Etkinlikler
Toplantı
Kahraman ve need4code.com Projesi Connect Toplantısı
Kahraman ve need4code.com Projesi Connect Toplantısı
Selam arkadaslar,
Programlama ile uğraşanların hayatlarını kolaylaştıracak desktop ve web tabanlı ortak iki proje ile ilgili 3. toplantımızı 3Aralık...
Kategori:
Toplantı
Kimler Burada? 
Son 1 dakika içinde MMIstanbul' da 262 (0 kayıtlı, 262 ziyaretçi) kullanıcı varmış. Login durumda olanlar aşağıda:
MMIstanbul Blog'undan
Neler Yapılabilir?
Yeni bir portal, 30 civarında online / offline etkinlik, seminer vb rağmen MMIstanbul sanıyoruz ki halen hakettiği ilgiyi göremedi. " ...
500 Hatası Hakkında!
Reklam, MMIstanbul ve Yeni Projeler (Durumumuz Bu Tarzında)
Ne Nedir Kampanyası Başlıyor!
Çok Merak Edenler için; MMIstanbul Geliştirme Ekibi ve Çalışma Ortamımız








