2012-06-29 16 views
11

Estoy trabajando en el sitio de un cliente, y él necesita las fechas de vencimiento del cupón para cambiar a rojo si tienen dos semanas o menos de vencimiento. De lo contrario, serán negros.(ColdFusion) Compare dos fechas, use el resultado para determinar qué muestra

El sitio en sí no fue hecho por mí. Empecé aquí y quieren que aprenda ColdFusion. Así que he estado tropezando con eso.

Pensé que quizás usando DateCompare o DateDiff podría obtener lo que quiero. Sin embargo, recibo texto ilegible cuando yo <CFOUTPUT> los resultados de cualquiera de las comparaciones. Muestra una cadena larga de 51515151551 que gradualmente se vuelve más y más pequeña para cada artículo de cupón subsiguiente en la lista de clientes.

La fecha del cupón en sí (es decir, fecha_final) se llama desde la base de datos Microsoft SQL. Está formateado con Dateformat: #dateformat(end_date,"m/d/yyyy")#.

Intenté compararlo con Now() para determinar dinámicamente si la fecha de caducidad debería ser de color rojo o no. También intenté formatear Now(), obtengo los mismos resultados.

¿Algún programador avezado aquí que pueda conducirme al camino correcto?

Respuesta

18

Datediff es lo que quieres. ¿Estás usando la parte de fecha correcta en la diferencia de fecha? Podrías usar 'ww' por semanas o 'd' por días, utilicé días en el siguiente ejemplo.

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

Obviamente no es necesario configurar una variable ni nada, esto es solo un ejemplo de código para que su idea funcione. :)

+0

Sí, lo él dijo textualmente :) –

+2

Creo que los valores 'expirados' están invertidos. – Leigh

+0

Ellos son! Arreglando ... Lo cambié así que CouponDate era primero luego Now() y no los cambiaba también. Buena atrapada. – 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

Esto funcionó para mí:

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

si quieres probar a utilizar 14 días con diferencia de tiempo se puede utilizar

Fix(dtdiff) en lugar de Round(dtdiff)

+0

¿Por qué reinventar la rueda? Eso es lo que hace DateDiff ya. – Leigh

+0

tuve un problema al comparar mtsql timestamp con coldfusion Now(). con esto arreglé el problema. y estoy seguro de que Stackoverflow espera respuestas diferentes ... y esto seguramente puede ayudar a otros. –

+0

¿Qué tipo de problema? (Si realmente quiere decir 'timestamp' que es totalmente diferente de date/datetime.) Cuando se trata de fechas, lo mejor es no hacer rodar su propia lógica a menos que haya una muy buena razón. – Leigh

Cuestiones relacionadas