Zum Inhalt springen

Model mit Funktion erweitern

Erstellt am 14. Mai 2015 · 2 Antworten · letzte Antwort am 18. Mai 2015

Tags: Frage

mbuchegger ·

Hi,

das ist jetzt auch Teil des letzten Posts, aber so kann man es vielleicht auch besser finden, wenn man mal gezielt danach sucht.

Folgende Herausforderung:
Das Model hat bereits ein Startdatum und Enddatum, welches über Backend angegeben werden kann.
Jetzt möchte ich, dass man herausfinden kann ob der Datensatz noch aktuell ist oder nicht. Also, ob das Enddatum bereits in der Zukunft liegt, oder nicht.

Dazu folgender Ansatz:

	/**
	* abgelaufen
	*
	* @var boolean $abgelaufen
	*/
	protected $abgelaufen = FALSE;

    /**
	* Returns the abgelaufen
	*
    * @return boolean $abgelaufen
    */
    public function getAbgelaufen() {
        return ($this->getEndtag() < new \DateTime());
    }
    
	/**
	* Sets the abgelaufen
	*
	* @param boolean $abgelaufen
	* @return void
	*/
	public function setAbgelaufen($abgelaufen) {
		$this->abgelaufen = $abgelaufen;
	}

    /**
    * Returns the boolean state of abgelaufen
    *
    * @return boolean
    */
    public function isAbgelaufen() {
        return $this->abgelaufen;
    }

In meinem Kopf hätte das ja schon funktionieren sollen. Tut es aber nicht. Zumindest nicht ganz.
Sehr spannend ist nämlich, dass Fluid zwar über eine abfrage <f:if condition="{datensatz.abgelaufen}"> wohl unterscheiden kann ob das Enddatum nun vorbei ist oder nicht, allerdings lt DEBUG Abgelaufen immer FALSE liefert.

Jetzt stellt sich die Frage... was ist hier verkehrt.

Mein Verständnis würde sagen - irgendwas stimmt da beim Setter nicht, $this->abgelaufen wurde doch nicht deklariert?! Hab aber nicht geschafft das zu korrigieren.

Da kommt noch eine weitere Herausforderung hinzu...
Was ich nicht so bedacht habe ist, dass bei $this->getEndtag() < new \DateTime() ein Datum mit einer aktuellen Tageszeit verglichen wird. Das bedeutet aber, dass bei einem Endtag 13.05.2015 natürlich Mitternacht gemeint ist, aber Abgelaufen doch erst nach dem 13.05. also am 14.05. TRUE sein soll. Das bedeutet Endtag + 86400 (sekunden eines tages). Hab da einiges herumprobiert aber bin nicht dahinter gekommen, vielleicht hat da auch jemand einen Tipp.

Hier mein Ansatz:

/**
* Returns the abgelaufen
*
* @return boolean $abgelaufen
*/
public function getAbgelaufen() {
    $folgetag = $this->getEndtag() + 86400;
    return ($folgetag < new \DateTime());
}

Lg M.

freeatweb ·

Hi,

ich würde ein abgelaufenes Datum wie folgt erkennen:

public function getAbgelaufen() {
  $folgetag = strtotime('+1 day', $this->getEndtag());
  return ($folgetag < new \DateTime());
}
mbuchegger · · Beste Antwort

hi retour,

sry hab da irgendwie geschafft mehrere Fragen zu erstellen. Gibt eigentlich schon ein gelöstes Thema dazu.

Meine Lösung war nun wie folgt:

    public function getAbgelaufen() {
        $temp = ($this->getEndtag() < new \DateTime('tomorrow'));
        return $temp;
    }

Wahrscheinlich wir deine Version genau so gut funktionieren.

glg M.