Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 08-04-2008, 14:30   #1 (permalink)
hilft gerne...
 
Registriert seit: Feb 2007
Ort: Carlsberg
Beiträge: 416
Arrays nach Datum sortieren

Hi all, habe letztens eine kleine Funktion geschrieben, die für den einen oder anderen vielleicht hilfreich sein kann. Nicht sonderlich kompliziert aber man muss ja das Rad nicht jedesmal neu erfinden

Es handelt sich um ein Array, in dem sich Daten (Datum ist gemeint) befinden, und zwar in String-Form. Nun habe ich eine Möglichkeit gesucht, die Elemente nach dem Datum zu sortieren. Alternativ kann man gleich die Elemente eines 2ten Arrays mitsortieren nach demselben Muster wie im ersten, d.h. wenn array1[0] an die Stelle 2 verschoben wird, wird array2[0] auch an die Stelle 2 verschoben. Dazu muss man nur bei den entsprechenden Zeilen die Kommentare entfernen.

Bitteschön...

ActionScript:
  1. //---- Beispiel-Array mit Daten in String-Form------->
  2. daten= ["2.1.2008","13.6.2004","2.4.2006","1.1.2000"];
  3. //titel= ["AB","DC","CD","Test"];
  4. //---- Array, das die verstrichenen Tage nach jedem Monat enthält---->
  5. tagebeimonat = [31,59,90,120,151,181,212,243,273,304,334];
  6. //---- Startjahr, ab dem die Sortierung greift ----- >
  7. mystartjahr = 1900;
  8.  
  9. function nachdatumsortieren(daten:Array) {
  10.     trace("Unsortiert: "+daten);
  11.     //trace("Unsortiert: " +titel);
  12.     for (i in daten) {
  13.         daten[i] = tageberechnen(daten[i]);
  14.     }
  15.     /*for (i in titel) {
  16.         titel[i] = daten[i].toString() + "_"+ titel[i];
  17.     }
  18.     titel.sort(arraysort);*/
  19.     daten.sort(arraysort)
  20.     var sortiert:Array = [];
  21.     for (i in daten) {   
  22.         sortiert[i] = datumberechnen(daten[i]);  
  23.     }
  24.     /*for (i in titel) {
  25.         titel[i] = titel[i].substring(titel[i].indexOf("_")+1,titel[i].length);
  26.     }*/
  27.     trace("Sortiert: "+sortiert);
  28.     //trace("Sortiert: "+titel);
  29.     return sortiert;
  30. }
  31.  
  32. nachdatumsortieren(daten);
  33.  
  34. //Array-Sort-Funktion, die in aufsteigender Reihenfolge sortiert
  35. function arraysort(a,b) {
  36.     if (a > b) {
  37.         return 1;
  38.     }
  39.     else if (a < b) {
  40.         return -1;
  41.     }
  42.     else {
  43.         return 0;
  44.     }
  45. }
  46.  
  47. //Schaltjahr-Check
  48. function schaltjahr (Year:Number) {
  49.     if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0)) {
  50.         return (true);
  51.     } else {
  52.         return (false);
  53.      }
  54. }
  55.  
  56. //Funktion, die die Anzahl der Tage seit dem 1.1. des Startjahres berechnet (Schaltjahr berücksichtigt)
  57. function tageberechnen(mystring:String) {
  58.     startjahr = mystartjahr;
  59.     myarray = mystring.split(".");
  60.     tage = parseInt(myarray[0]);
  61.     if (parseInt(myarray[1]) == 1) {
  62.         tagemonat = 0;
  63.     } else {
  64.         if (schaltjahr(parseInt(myarray[2]))) {
  65.             if (parseInt(myarray[2]) > 1) {
  66.                 tagemonat = tagebeimonat[parseInt(myarray[1])-2]+1;
  67.             } else {
  68.                 tagemonat = tagebeimonat[parseInt(myarray[1])-2];
  69.             }
  70.         } else {
  71.             tagemonat = tagebeimonat[parseInt(myarray[1])-2];
  72.         }
  73.     }
  74.     tagejahr = 0;
  75.     for (i=startjahr;i<parseInt(myarray[2]);i++) {
  76.         if (schaltjahr(i)) {
  77.             tagejahr = tagejahr + 366;
  78.         } else {
  79.             tagejahr = tagejahr + 365;
  80.         }
  81.     }
  82.     rang = tage+tagemonat+tagejahr;
  83.     //trace("Alle Tage vom 1.1."+startjahr+" bis zum " +mystring+": " + rang);
  84.     return rang;
  85. }
  86.  
  87. //Funktion, die aus einer Anzahl an Tagen ein Datum berechnet
  88. function datumberechnen(myrang:Number) {
  89.     startjahr = mystartjahr;
  90.     var hilf:Number = myrang;
  91.     var jahrzaehler:Number = startjahr;
  92.     while (hilf>0) {
  93.         if (schaltjahr(jahrzaehler)) {
  94.             hilf = hilf - 366;
  95.         } else {
  96.             hilf = hilf - 365;
  97.         }
  98.         jahrzaehler++;
  99.     }
  100.     if (schaltjahr(jahrzaehler-1)) {
  101.         hilf += 366;
  102.     } else {
  103.         hilf += 365;
  104.     }
  105.     jahr = jahrzaehler-1;
  106.     var monatzaehler:Number = -1;
  107.     hilf2 = hilf;
  108.     while (hilf2>0) {
  109.         monatzaehler++;
  110.         if (monatzaehler>0 && schaltjahr(jahr)) {
  111.             hilf2 = hilf - tagebeimonat[monatzaehler]-1;
  112.         } else {
  113.             hilf2 = hilf - tagebeimonat[monatzaehler];
  114.         }
  115.     }
  116.     monat = monatzaehler+1;
  117.     if (monatzaehler != 0) {
  118.         if ((monatzaehler-1)>0 && schaltjahr(jahr)) {
  119.             hilf2 = hilf - tagebeimonat[monatzaehler-1]-1;
  120.         } else {
  121.             hilf2 = hilf - tagebeimonat[monatzaehler-1];
  122.         }
  123.     } else {
  124.         hilf2 += tagebeimonat[monatzaehler];
  125.     }
  126.     tag = hilf2;
  127.     datum = tag + "." + monat + "." + jahr;
  128.     return datum;
  129. }

Grüßle
__________________
MfG Jan

Meine 2 besten Freunde: Flash-Hilfe und die Foren-Suche =)
McMannus ist offline   Mit Zitat antworten
Alt 08-04-2008, 17:04   #2 (permalink)
no guts no glory
 
Benutzerbild von readme.txt
 
Registriert seit: May 2004
Ort: Nordhorn
Beiträge: 7.998
wärs nicht viel einfacher die Daten in einen Timestamp zu wandeln und nach dem zu sortieren?
__________________
Bitte keine Privaten Nachrichten mit Fragen, dazu ist das Forum selbst da. Danke.

'We live in an amazing, amazing world, and it's wasted on the crappiest generation of spoiled idiots.'
readme.txt ist offline   Mit Zitat antworten
Alt 08-04-2008, 17:06   #3 (permalink)
hilft gerne...
 
Registriert seit: Feb 2007
Ort: Carlsberg
Beiträge: 416
Lass mich raten! Der Timestamp ist nix anders als meine Funktion, die aber statt den Tagen die Sekunden seit einem bestimmten Datum ausrechnet und es ist eine Zeile Code^^
__________________
MfG Jan

Meine 2 besten Freunde: Flash-Hilfe und die Foren-Suche =)
McMannus ist offline   Mit Zitat antworten
Alt 08-04-2008, 17:41   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
http://www.seibsprogrammladen.de/fra...orithmen/Array
Datum sortieren
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de
hgseib ist offline   Mit Zitat antworten
Alt 08-04-2008, 17:46   #5 (permalink)
hilft gerne...
 
Registriert seit: Feb 2007
Ort: Carlsberg
Beiträge: 416
Naja, wie man so schön sagt, es gibt viele Wege, die zum Ziel führen, mehr und weniger umständliche
__________________
MfG Jan

Meine 2 besten Freunde: Flash-Hilfe und die Foren-Suche =)
McMannus ist offline   Mit Zitat antworten
Alt 09-04-2008, 06:46   #6 (permalink)
?-Developer
 
Registriert seit: Jul 2004
Ort: Zuchwil (CH)
Beiträge: 903
Schreibe die Datumsinhalte um von z.B 2.1.2008 in 20080102 etc.
oder mach es noch einfacher, wandle die Daten in ein Datum vom
Typ DATE um, und speichere es so ins Array. Dann bräuchtest du
nicht mehr soviel Code.
__________________
Nur tote Fische schwimmen mit dem Strom
silentx ist offline   Mit Zitat antworten
Alt 09-04-2008, 12:43   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.326
[ in switzer-dialekt lesen: ]
switzer sind ein gemütliches folk, joo eeh?
und so flink sind sie auf den bergen. auf die idee mit dem Date-objekt (== Timestamp) isch hier noch nie jemand gekommen, oder ;-)
is cool man! sind die murmeltiere auch schon draussen?

[nur ein scherz]
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (09-04-2008 um 12:48 Uhr)
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele