Wybieranie daty nie późniejszej niż dzisiejsza data

0

Chciałbym zablokować możliwość wybrania daty poźniejszej od dzisiaj. Wyczytałem ze aby porównac daty nalezy uzyc funkcji strtotime(która dodaje sekundy dzieki ktorym mozena porównać) ale próbuje to zrobić i nie za bardzo wiem w którym miejscu to zrobić. Mam taki kod i to nie działa:

public function getDate() {
    $month = $this->month;
    return $this->year . '-' . $month . '-' . $this->day;
}
 
public function getDbFormatedDate() {
    if (checkdate($this->month, $this->day, $this->year) || $this->strtotime(getDate())>strtotime(date("Y-m-d"))){
    $dateDeadline = date_create($this->getDate());
    $this->BirthDate= date_format($dateDeadline, 'Y-m-d');
    Yii::$app->session->setFlash('success', Yii::t('app', 'Zmiany w profilu zostały zapisane'));
    }else
        Yii::$app->getSession()->setFlash('error', 'nie ma takeij daty');
}   
0
$this->strtotime(getDate())>strtotime(date("Y-m-d"))

Co to robi?
@zwiro wziąłeś się za framework, a nie bardzo masz pojęcie na temat OOP, przez co Ci jest bardzo trudno i co chwilę napotykasz problemy.

Jeżeli chcesz porównać daty robisz to w ten sposób:

$date = new DateTime($data['birthday_date']);
$now = new DateTime();

if($date < $now) {
    echo '$date jest z przeszłości';
}

Poza tym tworzysz kod, który ktoś musi później odkodować. Patrzysz na tego ifa i pół godziny się zastanawiasz o co chodzi. Nie lepiej to zapisać tak:

<?php
public function getDbFormatedDate() {
    if ($this->isValidGregorianDate() && $this->isPastDate($date)){ //pierwszy warunek musi być spełniony... 
    $dateDeadline = date_create($this->getDate());
    $this->BirthDate= date_format($dateDeadline, 'Y-m-d');
    Yii::$app->session->setFlash('success', Yii::t('app', 'Zmiany w profilu zostały zapisane'));
    }else
        Yii::$app->getSession()->setFlash('error', 'nie ma takeij daty'); // wywalasz taki sam error podczas gdy moze nie byc takiej daty LUB moze byc ona z przyszłości
}   

private function isValidGregorianDate(){
	return checkdate($this->month, $this->day, $this->year); // czy jak tam chcesz to sprawdzic
}

private function isPastDate($date){
	$datetime = new DateTime($date);
	$now = new DateTime();

	return $datetime < $now;
}

Jeżeli robisz takie cuda z datą to lepiej jest skorzystać z jakiejś biblioteki takiej jak Carbon albo samemu napisać klasę dla daty z tymi róznymi metodami zgodnie z zasadami OOP.

0

masz racje... teraz zastanawiam sie co mam wstawic w miejsce każdego $date

1 użytkowników online, w tym zalogowanych: 0, gości: 1