我的购物车里有代金券系统,代金券有效日期和有效日期。 确保有效的最佳方式是什么?
我愚蠢地设置今天的日期,然后询问数据库今天的日期是否大于或等于开始日期。即是02/02/2012 GTE
15/02/2012这显然不是!然后我问数据库,到期日期是LTE
到今天的日期。即是2012年2月29日LTE
15/02/2012再次它不是!当我把它放下纸时听起来是正确的!
以下是下面的代码,我正在使用自定义标记来正确转换日期,因为这对欧洲日期有很大帮助!仅供参考:日期字段在sql数据库中设置为日期。
我需要做的是确保今天的日期介于开始日期和结束日期之间。是否最好使用ColdFusion创建日期范围或在ColdFusion中使用BETWEEN
运算符?
<cfset todaysDate = DateFormat(now(), "dd/mm/yyyy")>
<CF_convertDate inputVariable="todaysDate" inputMask="EU" outputType="odbcdate" outputVariable="myDate">
<cfquery name="chk_voucher" datasource="#application.dsn#">
SELECT
uid_vouchers,
txt_vouch_name,
txt_vouch_descrip,
txt_vouch_code,
txt_vouch_type,
txt_vouch_percent,
txt_vouch_value,
dte_vouch_expiry,
dte_vouch_start,
uid_vouch_webid,
bit_vouch_archived,
txt_vouch_asign
FROM dbo.tbl_vouchers
WHERE bit_vouch_archive=<cfqueryparam cfsqltype="cf_sql_bit" value="no">
AND dte_vouch_start >= #myDate# AND dte_vouch_expiry <= #myDate#
AND txt_vouch_code=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.txt_vouch_code#">
</cfquery>
任何帮助都将不胜感激!!
答案 0 :(得分:2)
你有正确的想法,你只需要颠倒你的操作员。
只需在WHERE子句中更改此内容:
AND dte_vouch_start <= #myDate# AND dte_vouch_expiry >= #myDate#
(当然,您的#myDate#
变量应该在cfqueryparam
标记中。)
答案 1 :(得分:1)
AND dte_vouch_start <= #myDate# AND dte_vouch_expiry >= #myDate#
或
AND #myDate# BETWEEN dte_vouch_start AND dte_vouch_expiry