在ColdFusion中我可以看到下面的代码,但它似乎不起作用。我想确保仅在有效的from和to日期在范围内时才应用折扣,见下文。
if (
DATEDIFF("d", discount.ValidFrom(), now()) >= 0
AND
DATEDIFF("d", now(), discount.ValidTo()) <= 0
){
// ALL OK Accept Discount
}
else
{
// Discount is no Longer Valid boo!
}
答案 0 :(得分:4)
试试这个:
Today = Int(Now());
if ( Today GTE Int(discount.ValidFrom())
AND Today LTE Int(discount.ValidTo())
)
{
// discount is valid
}
else
{
// no longer valid
}
它有效,因为日期时间基本上只是数字 - 整数/整数部分是天数,小数/分数部分是时间。
因此,应用Int
函数会将日期时间转换为整天日期,然后您可以进行简单的数字比较以确保它在范围内。
我发现这比DateDiff
更容易理解和理解 - 对于事物的排序没有混淆,我认为这是你提供的代码片段的问题(你已经切换了两个命令和lte / gte;你只想改变一个或那个。)
答案 1 :(得分:4)
你的逻辑有点偏。现在你回来了
if ({positive_number} and {negative_number})
返回false。你应该检查dateDiff(“d”,今天,discount.to())是否也是> = 0。
<cfscript>
local = {};
local.start = createDate( 2011, 10, 01 );
local.end = createDate( 2011, 10, 30 );
local.today = now();
local.valid = false;
if ( (dateDiff("d", local.start, local.today) >= 0)
AND (dateDiff("d", local.today, local.end) >= 0) ){
local.valid = true;
}
</cfscript>
<cfoutput>
x < z: #dateDiff("d", local.start, local.today) GTE 0#
<hr />
z < y: #dateDiff("d", local.today, local.end) GTE 0#
<hr />
Valid: #local.valid#
</cfoutput>