2012-06-29 5 views
11

Sto lavorando sul sito di un cliente, e ha bisogno di promozione Le date di scadenza per cambiare rosso se sono due settimane o meno alla scadenza. Altrimenti saranno neri.(ColdFusion) Confronta due date, risultato uso per determinare quali mostra

Il sito stesso non è stato creato da me. Ho appena iniziato qui e vogliono che impari ColdFusion. Quindi ci sono inciampato.

Ho pensato che forse utilizzando DateCompare o DateDiff ho potuto ottenere quello che voglio. Tuttavia ottengo testo confuso quando I <CFOUTPUT> i risultati di entrambi i confronti. Visualizza una lunga stringa di 51515151551 che gradualmente diventa sempre più piccola per ogni articolo di coupon successivo nell'elenco dei clienti.

La data di coupon stesso (cioè data_finale) viene chiamato dal database Microsoft SQL. È formattato usando Dateformat: #dateformat(end_date,"m/d/yyyy")#.

Ho provato a confrontarlo con Now() per determinare dinamicamente se la data di scadenza debba essere colorata in rosso. Ho anche provato a formattare Now(), ottengo gli stessi risultati.

Qualsiasi programmatore esperto qui che potrebbe portarmi sulla strada giusta?

risposta

18

Datediff è ciò che desideri. Stai utilizzando la data corretta per la data di diff? Potresti usare 'ww' per settimane o 'd' per giorni, ho usato giorni nell'esempio seguente.

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

Ovviamente non è necessario impostare una variabile o altro, questo è solo un esempio di codice per far funzionare la propria idea. :)

+0

Già, che ha detto, alla lettera. :) –

+2

Penso che i valori "scaduti" siano invertiti. – Leigh

+0

Loro sono! Correzione ... L'ho acceso così CouponDate è stato prima di Now Now() e non li ha scambiati neanche io. Buona pesca. – 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

Questo ha funzionato per me:

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

se si wan't di utilizzare 14 giorni con differenza di tempo è possibile utilizzare

Fix(dtdiff) invece di Round(dtdiff)

+0

Perché reinventare la ruota? Questo è ciò che DateDiff fa già. – Leigh

+0

ho avuto un problema con il confronto di timestamp mssql in coldfusion Now(). con questo ho risolto il problema. e sono sicuro che Stackoverflow si aspetta risposte diff .. e questo può sicuramente aiutare gli altri. –

+0

Che tipo di problema? (Se in realtà si intende 'timestamp' che è completamente diverso da data/datetime.) Quando si tratta di date, è meglio non eseguire la propria logica a meno che non ci sia una buona ragione. – Leigh