2016-06-14 5 views
2

Ich habe ein Attribut valid_till des Typs DATE.CakePHP 3: Überprüfen Sie das Datum größer als heute

Nun, was ich tun möchte, ist valid_till vom heutigen Tag zu vergleichen.

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

Aber das funktioniert nicht. Wie könnte ich das tun?

+0

Falls der Gutschein nicht auf eine bestimmte Zeit gebunden ist, , speichern Sie das Ablaufdatum lieber nur als Datum. Auf diese Weise würden die Zeitkomponenten des 'valid_till'-Datumsobjekts korrekt auf '0' gesetzt. – ndm

+0

Entschuldigung für das vertippte 'DATETIME', sein' DATE' nur –

Antwort

6

valid_till bereits ein Datum/Zeit-Objekt, abhängig von Ihrer CakePHP-Version und Konfiguration standardmäßig entweder \Cake\I18n\Time, \Cake\I18n\Date oder \Cake\I18n\FrozenDate, entweder durch Kohlenstoff oder Chronos gesichert sein sollte.

Wenn Sie auf CakePHP sind> = 3,2, dann sollten Sie ein \Cake\I18n\Date oder \Cake\I18n\FrozenDate Objekt haben, und Sie sollten einfach in der Lage sein, die Gültigkeit zu überprüfen mit isPast(), wie

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

Für frühere Versionen Sie‘ d haben gegen überprüfen heute auch, wie

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

Siehe auch

+0

Danke für die einfachste Antwort. Ich bin auf CakePHP 3.2 –

1

Try this:

$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

Danke, dass es funktioniert hat. Aber mit wenig Veränderung in der zweiten Zeile zu '$ dt = new Time ($ valid_till);'. Über Code gibt Fehler als "Klasse" App \ Controller \ datetime nicht gefunden ". Ich habe 'cake \ I18n \ Time;' im Controller verwendet und das funktioniert. –

+0

Sie sind willkommen ... –

+0

Dank @ndm für das Teilen. –