(ColdFusion) Сравните две даты, используйте результат, чтобы определить, какие дисплеи

Я работаю на клиентском сайте, и ему нужны даты окончания купона, чтобы изменить красный цвет, если они истекают две недели или меньше. В противном случае они будут черными.

Сам сайт не был сделан мной. Я только начал здесь, и они хотят, чтобы я изучил ColdFusion. Поэтому я спотыкался.

Я подумал, что, возможно, используя DateCompare или DateDiff, я мог бы получить то, что хочу, Однако я получаю искаженный текст, когда я <CFOUTPUT> результаты любого сравнения. Он отображает длинную строку 51515151551, которая постепенно становится меньше и меньше для каждого последующего пункта купона в списке клиентов.

Сама дата купона (т.е. end_date) вызывается из базы данных Microsoft SQL. Он форматируется с помощью Dateformat: #dateformat(end_date,"m/d/yyyy")#.

Я попытался сравнить его с Now(), чтобы динамически определить, должна ли дата истечения срока годности быть красной. Я также пробовал форматирование Now(), я получаю те же результаты.

Любые опытные программисты здесь могут привести меня к правильному пути?

Ответ 1

Datediff - это то, что вы хотите. Используете ли вы правильную дату в формате даты? Вы можете использовать "ww" в течение недель или "d" в течение нескольких дней, я использовал дни в приведенном ниже примере.

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

Очевидно, вам не нужно устанавливать переменную или что-то еще, это всего лишь примерный код, чтобы заставить вашу идею работать.:)

Ответ 2

<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>

Ответ 3

Это сработало для меня:

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

Если вы не будете использовать 14 дней с разницей во времени, вы можете использовать

Fix(dtdiff) вместо Round(dtdiff)