nach Datum sortieren

ali-gator

Erfahrenes Mitglied
Hallo,

ich bin gerade dabei eine kleine News-Box zu erstellen. Hierbei sollen die News nach Datum sortiert werden bevor sie angezeigt werden, das Datum wird im Format JJJJ-MM-TT abgespeichert. Jetzt hab ich allerdings keine Ahnung wie ich das sortieren kann, die grundlegende Funktion is mir schon klar (array, wenn das eins größer ist als das setze es auf platz 1 usw), aber wie kann ich die Daten miteinander vergleichen? Eine Idee von mir war ja das Datum einfach zusammenzuzählen und dann zu vergleichen, aber ich glaube das geht ja mit dem XML Wert nicht so einfach (abgesehen davon stören die "-")...
Weiß jemand was?

bis dann

ali-gator

//edit: Hmm, wo wir gerade dabei sind, kann ich bei dynamischen Textfeldern in Flash einen Zeilenumbruch erzwingen?!
 
Zuletzt bearbeitet:
Hi,

Ich würde folgendermaßen vorgehen:
  • XML-Objekt parsen und die einzelnen Knoten in einem Array aus Objekten ablegen. Eine Eigenschaft dieser Objekte sei das Datum als Zeichenkette im Format "TT-MM-JJ"

  • Umwandeln dieser Zeichenkette in einen Timestamp, indem der String am Seperator "-" geteilt wird und die einzelnen Teile als Integerwerte zur Erstellung eines neuen Date-Objektes verwendet werden

  • Sortierfunktion anlegen, die ein Array aus Objekten anhand eines Members (Timestamp) sortiert

Hier mal ein kleiner Beispielcode, der mit einem solchen Array arbeitet:
Code:
// Wir legen ein Array aus Objekten an mit der Eigenschaft "d" (Datum 
// als String) an:
var events = new Array({d:"01-01-2006"}, {d:"24-12-2005"}, {d:"15-01-2006"});

// Wir bereiten das ganze auf, indem wir aus diesen Strings
// Timestamps erstellen, die in der Eigenschaft "_stamp" abgelegt werden:
for (var i in events) {
	var obj = events[i].d;
	var parts = obj.split("-");
	var _day = parseInt(parts[0], 10);
	var _month = parseInt(parts[1], 10);
	_month --;
	if (_month < 0) _month = 11;
	var _year = parseInt(parts[2], 10);
	var _date = new Date(_year, _month, _day);
	events[i]._stamp = _date.valueOf();
}

// Nun können wir das Array mit einer Vergleichsfunktion sortieren:
events.sort(byDate);

// Ausgabe des Arrays zu Testzwecken:
for (var i=0; i<events.length; i++) {
	trace(events[i].d);
}

// Vergleichsfunktion, die die "_stamp"-Eigenschaften
// zweier Objekte vergleicht:
function byDate(o1, o2) {
	if (o1._stamp > o2._stamp) {
		return 1; // Für eine absteigende Sortierung ...
	} else if (o1._stamp < o2._stamp) {
		return -1; // ... müssen diese Werte vertauscht werden!
	} else {
		return 0;
	}
}

Gruß

P.S.: Zeilenumbrüche kannst Du mit dem Zeichen chr(13) (bzw. "\n") erzwingen.
.
 
noch ne Frage zwischendurch:

ich hab die Zeilenumbrüche im Flash jetzt mit textfeld.WordWrap = true; gelöst, dann macht er die auch rein. Allerdings muss ich zur Anordnung die Textfeldhöhe auslesen und da liest er immer nur die vorgegeben Höhe aus und nicht die Höhe die dann tatsächlich vorhanden ist wenn er den Text eingefügt hat...
!
 
Zurück