2016-06-14 93 views
2

我有一個屬性valid_till類型DATECakePHP 3:檢查日期大於今天

現在我想要做的就是比較今日的valid_till

$couponCheck = $this->Coupons->find('all', [ 
    'conditions' => [ 
     'coupon_code' => $couponCode 
    ] 
    ]); 
    if ($couponCheck->count() === 1) { 
    $coupon = $couponCheck->first(); 
    if ($coupon->valid_till >= isToday()) { 
     echo 'Coupon is Valid'; 
    } else { 
     echo 'Coupon is Expired'; 
    } 
    } else { 
     echo 'This is not a valid coupon code'; 
    } 

但這不起作用。我怎麼能這樣做?

+0

如果優惠券未綁定到特定的時間,您最好只將截止日期保存爲日期。這樣'valid_till'日期對象將其時間分量正確地設置爲'0'。 – ndm

+0

抱歉錯誤地輸入了'DATETIME',它的'DATE'只有 –

回答

6

valid_till應該已經是一個日期/時間對象,這取決於你的CakePHP版本和配置,默認情況下無論是\Cake\I18n\Time\Cake\I18n\Date,或\Cake\I18n\FrozenDate,通過碳或Chronos的支持。

如果你在CakePHP的> = 3.2,那麼你應該有一個\Cake\I18n\Date\Cake\I18n\FrozenDate對象,你應該能夠簡單地檢查使用isPast()有效性,像

if (!$coupon->valid_till->isPast())) { 
    echo 'Coupon is Valid'; 
} else { 
    echo 'Coupon is Expired'; 
} 

對於早期版本的你」 d具有對證今天也一樣,也

!$coupon->valid_till->isPast() || $coupon->valid_till->isToday() 

+0

感謝您提供最簡單的答案。我在CakePHP 3.2上 –

1

試試這個:

$valid_till = $coupon->valid_till; 
$dt = new DateTime($valid_till); 

$date = $dt->format('Y-m-d'); 
if ($date >= date('Y-m-d')) { 
echo 'Coupon is Valid'; 
} else { 
echo 'Coupon is Expired'; 
} 
+1

謝謝你的工作。但是第二行很少改變爲'$ dt = new Time($ valid_till);'。關於代碼給錯誤'類'App \ Controller \ datetime'找不到'。我已經在控制器中使用了'使用Cake \ I18n \ Time;'並且這個工作正常。 –

+0

不客氣... –

+0

謝謝@ndm分享此。 –

相關問題