Seite 1 von 1

Listview sortieren nach Tag und Monat

Verfasst: Fr 8. Apr 2022, 17:50
von r_kempf
Hallo,
wir möchten eine Liste von Mitgliedern erstellen, die demnächst Geburtstag haben. Dazu gibt es ein Datumsfeld "Profil_Geburtsdatum" in der Kundenverwaltung.
Die Liste geben per listview type=customer aus:

Code: Alles auswählen

<we:listview type="customer" order="Profil_Geburtsdatum" rows="6">
	<we:repeat>
		<we:field type="date" name="Profil_Geburtsdatum" format="d.m." /><we:var type="global" name="Year" />: <we:field name="Forename"/> <we:field name="Surname"/>
	</we:repeat>
Das Sortieren nach dem Geburtsdatum bringt ein falsches Ergebnis, weil das Jahr nicht das aktuelle, sondern das Geburtsjahr ist.
Die Sortierung müsste deshalb nur nach Tag und Monat erfolgen.
Hat jemand eine Idee, wie man das umsetzt?

Re: Listview sortieren nach Tag und Monat

Verfasst: Fr 8. Apr 2022, 22:01
von WBTMagnum
Hallo Regina,

Ich fürchte, dass das nicht ganz trivial umzusetzen ist. Ich habe erst mal nur nach SQL Lösungen gesucht. Da stößt man schon auf spannende Konzepte (z.B. https://code-examples.net/en/q/11e11cd). Das dann noch mit einer Listview abzubilden stelle ich mir schwierig vor. Da müsste man vermutlich auf <we:listview type="sql" /> zurück greifen.


Liebe Grüße,
Sascha

Re: Listview sortieren nach Tag und Monat

Verfasst: Sa 9. Apr 2022, 11:04
von mokraemer
nein, probier mal ein order="DAYOFYEAR(Profil_Geburtsdatum)" oder alternativ order="DATE_FORMAT(Profil_Geburtsdatum,'%m-%d')"

ersteres dürfte im Falle von Schaltjahren anders sortieren. Letztere sortiert dann eben auf einem String.

Re: Listview sortieren nach Tag und Monat

Verfasst: Sa 9. Apr 2022, 13:13
von r_kempf
Danke, Marc, genau danach habe ich gesucht!!!
Die Sortierung klappt soweit.
Jetzt möchte ich noch die abgelaufenen Geburtstage mit Prüfung nach Monat und Tag rausfiltern. So funktioniert es aber nicht:

Code: Alles auswählen

<we:listview type="customer" order="DAYOFYEAR(Profil_Geburtsdatum)" rows="6" condition="freigabe">
	<!-- Aktuelles Datum ermitteln -->
	<?php $GLOBALS['curDate']= date("md", time()); ?>
		<we:repeat>
			<we:ifField type="date" name="Profil_Geburtsdatum" format="md" match="$curDate" operator="greater|equal">
			<we:field type="date" name="Profil_Geburtsdatum" format="d.m." /><we:var type="global" name="Year" />
			</we:ifField>
		</we:repeat>
</we:listview>
Kann hier ein Vergleich beschränkt auf Monat und Tag erfolgen? Nach dem Geburtsjahr sind ja alle abgelaufen.
Die Frage ist, was das Attribut format="md" im we:ifField macht!?