2012-06-29 21 views
11

Bir müşterinin sitesinde çalışıyorum ve son kullanma tarihinin iki hafta veya daha kısa olması durumunda kırmızıya geçmek için kuponun son kullanma tarihlerine ihtiyacı var. Aksi takdirde siyah olurlar.(ColdFusion) İki tarihi karşılaştırın, sonuçları görüntülemek için sonucu kullanın

Sitenin kendisi tarafımdan yapılmadı. Buraya yeni başladım ve ColdFusion öğrenmemi istiyorlar. Ben de bunun içinden geçtim.

belki DateCompare veya DateDiff kullanarak İstediğimi elde düşündük. Ancak, ben <CFOUTPUT>, karşılaştırmanın sonuçları ne zaman bozuk metin olsun. Müşteriler listesindeki her sonraki kupon öğesi için giderek daha küçük ve daha küçük olan 51515151551 uzun bir dizgisi görüntüler.

Kuponun tarihi (yani end_date) Microsoft SQL veritabanından çağrılır. Dateformat: #dateformat(end_date,"m/d/yyyy")# kullanılarak biçimlendirilmiştir.

Dinamik son kullanma tarihi kırmızı renkli olmalıdır olup olmadığını belirlemek amacıyla Now() ile karşılaştırmaya çalıştık. Aynı zamanda Now() biçimlendirmeyi de denedim, aynı sonuçları elde ediyorum.

Burada herhangi bir deneyimli programcı beni doğru yola yönlendirebilir mi?

cevap

18

Datediff istediğin şeydir. Tarih farklı tarih bölümünü kullanıyor musunuz? Günler için 'ww' yi haftalarca veya 'd' kullanabilirdiniz, aşağıdaki örnekte günleri kullandım.

<cfset CouponDate = createDate(2012, 05, 29) /> 
<cfif DateDiff("d", CouponDate, Now()) GTE 14> 
    <cfset Expired = False /> 
<cfelse> 
    <cfset Expired = True /> 
</cfif> 

Açıkçası, bir değişken veya herhangi bir şey ayarlamanıza gerek yoktur, bu, fikrinizin işe yaraması için yalnızca bir örnek koddur. :)

+0

Evet, kullanabilirsiniz neler O, verbatim dedi. :) –

+2

Sanırım, "süresi geçmiş" değerler tersine döndü. – Leigh

+0

Onlar! Onarma ... Ben CouponDate ilk önce Now() ve onları da takas etmedim. İyi yakalama. – Busches

1
<cfscript> 
// setup first test date for 7 days ago 
date1 = dateAdd('d', -7, now()); 
// setup second date for 14 days ago 
date2 = dateAdd('d', -14, now()); 
// compare date 1 
writeOutput(dateDiff('d', date1, now()) & '<hr/>'); 
// compare date 2 
writeOutput(dateDiff('d', date2, now()) & '<hr/>'); 
// demonstrate use 
if (dateDiff('d', date2, now()) gte 14) { 
    writeOutput('RED'); 
} 
</cfscript> 
0
Bu benim için çalıştı

: Eğer saat farkı ile 14 gün kullanmak wan't

<cfset dtdiff = query.expiry_date - Now() /> 
<cfif Round(dtdiff) LEQ 14> 
    Red 
<cfelse> 
    Black 
</cfif> 

Eğer

Fix(dtdiff) yerine Round(dtdiff)

+0

Tekerleği neden yeniden icat edin? DateDiff zaten böyle yapıyor. – Leigh

+0

mssql zaman damgasını coldfusion Now() ile karşılaştırarak sorunu yaşadım. Bununla sorunu çözdüm. Ve eminim Stackoverflow farkli cevaplar bekler .. ve bu kesinlikle başkalarına yardımcı olabilir. –

+0

Ne tür bir sorun? (Eğer gerçekten tarih/datetime'den tamamen farklı bir zaman damgası demektir). Tarihler söz konusu olduğunda, çok iyi bir neden olmadığı sürece kendi mantığınızı yuvarlamamak için en iyisi. Şimdi mssql zaman damgası arasındaki fark ile – Leigh

İlgili konular