2012-06-29 35 views
11

Tôi đang làm việc trên trang web của khách hàng và cần ngày hết hạn phiếu giảm giá để đổi màu đỏ nếu hai tuần hoặc ít hơn để hết hạn. Nếu không, chúng sẽ có màu đen.(ColdFusion) So sánh hai ngày, sử dụng kết quả để xác định nội dung hiển thị

Bản thân trang web không do tôi tạo ra. Tôi mới bắt đầu ở đây và họ muốn tôi học ColdFusion. Vì vậy, tôi đã vấp ngã qua nó.

Tôi nghĩ rằng có thể bằng cách sử dụng DateCompare hoặc DateDiff Tôi có thể nhận được những gì tôi muốn. Tuy nhiên tôi nhận được văn bản bị cắt xén khi tôi <CFOUTPUT> kết quả của việc so sánh. Nó hiển thị một chuỗi dài 51515151551 dần dần trở nên nhỏ hơn và nhỏ hơn cho mỗi mục phiếu thưởng tiếp theo trong danh sách khách hàng.

Bản thân ngày phiếu thưởng (tức là end_date) được gọi từ cơ sở dữ liệu Microsoft SQL. Nó được định dạng bằng Dateformat: #dateformat(end_date,"m/d/yyyy")#.

Tôi đã cố gắng so sánh nó với Now() để tự động xác định xem ngày hết hạn có được tô màu đỏ hay không. Tôi cũng đã thử định dạng Now(), tôi nhận được kết quả tương tự.

Bất kỳ lập trình viên dày dạn nào ở đây có thể dẫn tôi đến đúng con đường?

Trả lời

18

Datediff là thứ bạn muốn. Bạn có đang sử dụng phần ngày chính xác trong ngày khác không? Bạn có thể sử dụng 'ww' trong nhiều tuần hoặc 'd' trong nhiều ngày, tôi đã sử dụng các ngày trong ví dụ dưới đây.

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

Rõ ràng bạn không cần đặt biến hoặc bất kỳ thứ gì, đây chỉ là một số mã ví dụ để làm cho ý tưởng của bạn hoạt động. :)

+0

Yeah, những gì anh ta nói, đúng nguyên văn. :) –

+2

Tôi nghĩ rằng các giá trị 'hết hạn' được đảo ngược. – Leigh

+0

Chúng! Sửa chữa ... Tôi đã chuyển nó lên để CouponDate là lần đầu tiên sau đó Now() và không trao đổi chúng xung quanh quá. Nắm bắt tốt. – 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

này đã làm việc cho tôi:

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

nếu bạn wan't để sử dụng 14 ngày với thời gian khác nhau, bạn có thể sử dụng

Fix(dtdiff) thay vì Round(dtdiff)

+0

Tại sao tái tạo bánh xe? Đó là những gì DateDiff đã làm. – Leigh

+0

tôi đã có vấn đề với so sánh mssql timestamp để coldfusion Now(). với điều này tôi đã khắc phục vấn đề. và tôi chắc chắn Stackoverflow mong đợi câu trả lời khác .. và điều này chắc chắn có thể giúp người khác. –

+0

Loại sự cố nào? (Nếu bạn thực sự có nghĩa là 'dấu thời gian' hoàn toàn khác với ngày/giờ.) Khi nói đến ngày tháng, tốt nhất là không xoay vòng logic của riêng bạn trừ khi có lý do rất tốt. – Leigh

Các vấn đề liên quan