检查日期是在两个日期之间

时间:2011-10-11 15:26:37

标签: coldfusion coldfusion-9

在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!
}

2 个答案:

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