Проверка даты между двумя датами - PullRequest
2 голосов
/ 11 октября 2011

В ColdFusion я вижу код ниже, однако, похоже, он не работает. Я хочу убедиться, что скидка применяется только в том случае, если действительные даты от и до находятся в диапазоне, см. Ниже.

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 ]

4 голосов
/ 11 октября 2011

Ваша логика немного не в порядке.Прямо сейчас вы возвращаете

<code>if ({positive_number} and {negative_number})

, который возвращает false.Вы должны проверить, если dateDiff ("d", today, 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>
4 голосов
/ 11 октября 2011

Попробуйте это:

Today = Int(Now());

if ( Today GTE Int(discount.ValidFrom())
 AND Today LTE Int(discount.ValidTo())
   )
{
    // discount is valid
}
else
{
    // no longer valid
}

Это работает, потому что datetime - это просто числа - целая / целая часть - это дни, а десятичная / дробная часть - время.

применение функции Int преобразует дату и время в дату целого дня, а затем вы можете просто выполнить простое числовое сравнение, чтобы убедиться, что оно находится в пределах диапазонов.

Я считаю, что это далекоболее читабельный и понятный, чем материал DateDiff - нет никакой путаницы в порядке упорядочения вещей, что, я думаю, является проблемой с предоставленным вами фрагментом кода (вы переключили порядок и lte / gte; выхотел только поменять одно или другое).

...