Datetime CakePHP 3:检查日期是否大于今天

Datetime CakePHP 3:检查日期是否大于今天,datetime,cakephp,cakephp-3.0,Datetime,Cakephp,Cakephp 3.0,我有一个类型为DATE的属性在之前有效 现在我想做的是比较从今天起到现在的valid\u $couponCheck = $this->Coupons->find('all', [ 'conditions' => [ 'coupon_code' => $couponCode ] ]); if ($couponCheck->count() === 1) { $coupon = $couponCheck->fir

我有一个类型为
DATE
的属性
之前有效

现在我想做的是比较从今天起到现在的
valid\u

$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';
   }
但这是行不通的。我该怎么做呢?

试试这个:

$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';
}

valid\u-til
应该已经是日期/时间对象,这取决于您的CakePHP版本和配置,默认情况下可以是
\Cake\I18n\time
\Cake\I18n\date
\Cake\I18n\FrozenDate
,由Carbon或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';
}
对于早期版本,您也必须检查今天的版本,例如

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


谢谢,它成功了。但在第二行中几乎没有变化,
$dt=新时间($valid\u-till)。关于代码给出错误,因为未找到类“App\Controller\datetime”
。我用了
用蛋糕\I18n\Time正在运行。感谢@ndm分享此信息。
有效期到
应该已经是一个时间对象,可以使用Chronos/Carbon提供的方法轻松检查@ANUJSHARMA9196如果优惠券未绑定到特定时间,您最好将到期日期存储为仅日期。这样,
valid\u-til
date对象的时间组件就可以正确地设置为
0
。很抱歉,键入的
DATETIME
错误,它的
date
仅适用于最简单的答案。我使用的是CakePHP3.2