Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 05-01-2012, 12:46   #1 (permalink)
Fohlen-Power
 
Benutzerbild von enky
 
Registriert seit: Mar 2007
Beiträge: 1.223
Aktuellstes Datum aus einer Liste ermitteln

Hallo zusammen,

folgende Frage bzw Problem bzw Ideensuche^^
Also ich habe eine XML Liste wie folgt

PHP-Code:
<datum>
  <
termin date="01/03/2012/12:00" id="1">Paket1</termin>
  <
termin date="01/05/2012/12:00" id="2">Paket2</termin>
  <
termin date="01/07/2012/12:00" id="3">Paket3</termin>
</
datum
So, was geschieht. Die swf ruft eine xml auf, die Datumsangabe da oben.
Wie man sehen kann haben wir dort den 3, 5 und 7 Januar als Beispiel.

Wird der banner jetzt am 4 Januar aufgerufen, wäre die id1 das aktuelle Datum. Rufen wir den banner am 6 Januar auf zb würde id2 aktuell sein, usw.

Meine Frage ist jetzt, wie kann ich ermitteln, welches Datum grade das aktuell gültige ist.

Mir würde spontan nur einfallen alle Datumsangaben vom aktuellen timestamp abzuziehen und die zeile die den kleinsten positiven abstand am ende der berechnung bringt, ist das aktuelle Datum.


Im Prinzip vereinfacht gesagt

PHP-Code:
Aufrufdatum 6 Januar

6 Januar 
3 Januar = +3
6 Januar 
5 januar = +1
6 Januar 
7 Januar = -
Alles in Ein Array, sortieren -irgendwie, weiter.

Aber gibt es vll eine einfachere Methode oder hat jemand ne Idee wie man es anders machen könnte?
__________________
Vielen Dank für euer Verständnis für einen Flash Noob !!!
enky ist offline   Mit Zitat antworten
Alt 05-01-2012, 15:15   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
Zitat:
Mir würde spontan nur einfallen alle Datumsangaben vom aktuellen timestamp abzuziehen und die zeile die den kleinsten positiven abstand am ende der berechnung bringt, ist das aktuelle Datum.
letztlich läuft es auf genau sowas hinaus; auch wenn es noch 1-2 andere Möglichkeiten gibt das zu implementieren.
bspw:
PHP-Code:
//pseudocode
var t=null
for 
each(termin in termine){
    if(
termin.date now && !|| termin.date max.datetermin;
}
trace(t);

//wenn die Termine bereits nach datum sortiert sind, geht auch sowas:
//aufsteigend sortiert
var null;
for 
each(termin in termine){
    if(
termin.date now) break;
    
termin;
}
trace(max);

//absteigend:
var null;
for 
each(termin in termine){
    if(
termin.date now){
        
termin;
        break;
    }
}
trace(t); 
Falls du das nicht schon getan hast, würde ich dir raten das ganze erstmal in eine vernünftige Datenstruktur zu parsen, und nicht permanent mit den XML-Daten zu arbeiten. Das ist schneller und einfacher.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 05-01-2012, 15:48   #3 (permalink)
Fohlen-Power
 
Benutzerbild von enky
 
Registriert seit: Mar 2007
Beiträge: 1.223
Danke dir bis dahin, leider hab ich bisher noch nicht soviele mit for each schleifen zu tun gehabt und so rechts verstehe ich deswegen aauch nicht deine Hilfe. Mein bisheriger Code schaut wie folgt aus.

PHP-Code:
var myXML:XML;
var 
myLoader:URLLoader = new URLLoader();
myLoader.load(new URLRequest("ablaufXML.xml"));
myLoader.addEventListener(Event.COMPLETEprocessXML);

var 
actDate = new Date().getTime();


function 
processXML(e:Event):void {
    
myXML = new XML(e.target.data);
    var 
dAnz:Number myXML.datum.termin.length();

    var 
xmlDArray:Array = new Array();

    for (var 
i:Number 0i<dAnzi++) {
        var 
xmlDate myXML.datum.termin[i]. @ date;
        var 
xmlID myXML.datum.termin[i]. @ id;

        
xmlDate Date.parse(xmlDate);

        
xmlDArray.push(xmlDate);


        if (
== dAnz 1) {
            
trace("done");
            for (var 
index in xmlDArray) {
                
trace(index+" => "+xmlDArray[index]);

                var 
null;
                if (
xmlDArray[index]>actDate) {
                    break;
                    
trace(t)
                }
                
xmlDArray[index];
trace("t2: "+t)
            }

        }
    }

__________________
Vielen Dank für euer Verständnis für einen Flash Noob !!!

Geändert von enky (05-01-2012 um 15:49 Uhr)
enky ist offline   Mit Zitat antworten
Alt 05-01-2012, 22:35   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
leg idealerweise erstmal eine Klasse Termin an
PHP-Code:
package  
{
    public class 
Termin 
    
{
        private var 
_id:uint;
        private var 
_timestamp:Number;
        private var 
_value:String;
        
        public function 
Termin(id:uinttimestamp:Numbervalue:String=null
        {
            
_id id;
            
_timestamp timestamp;
            
_value value;
        }
        
        public function 
get id():uint { return _id; }
        
        public function 
get timestamp():Number { return _timestamp; }
        
        public function 
get date():Date { return new Date(_timestamp); }
        
        public function 
get value():String { return _value; }
        public function 
set value(value:String):void 
        
{
            
_value value;
        }
        
        
        public function 
toString():String
        
{
            return 
'[Termin id="' _id '" date="' date.toLocaleString() + '"]';
        }
    }

dann parst du die xml-Datei:

PHP-Code:
var termine:Array = [];
//var termine:Vector.<Termin> = new Vector.<Termin>();

var xmlLoader:URLLoader = new URLLoader();
    
xmlLoader.addEventListener(Event.COMPLETEprocessXML);
    
xmlLoader.load(new URLRequest("ablaufXML.xml"));

    
function 
processXML(e:Event):void 
{
    
e.target.removeEventListener(Event.COMPLETEprocessXML);    //aufräumen
    
var xml:XML = new XML(e.target.data);
    
    for 
each(var node:XML in xml.termin) {
        var 
id:uint parseInt(node.@id10);
        var 
timestamp:Number Date.parse(node.@date);
        var 
value:String node.toString();
        
        var 
termin:Termin = new Termin(idtimestampvalue);
        
termine.push(termin);
        
        
//oder die Kurzform:
        //termine.push(new Termin(
            //parseInt(node.@id, 10),
            //Date.parse(node.@date),
            //node.toString()
        //));
    
}
    
    
//so, jetzt liegen sämtliche Daten aus der XML-Datei in einer vernünftigen Struktur vor.
    //xml ist jetzt überflüssig
    
doSth();
}


function 
doSth():void 
{
    
trace(termine.length);
    
trace(findLastEntry());
}


function 
findLastEntry():Termin
{
    var 
last:Terminnow:Number = new Date().time;
    for 
each(var termin:Termin in termine) {
        if (
termin.timestamp <= now && (!last || termin.timestamp last.timestamp))
            
last termin;
    }
    return 
last;

und als kleines Schmankerl, die etwas umfangreichere Variante
PHP-Code:
function findLastBefore(time:Object=null):Termin
{
    var 
$time:Numberlast:TerminlastTS:Number;
    
    if (!
time || time === "now")    $time = new Date().time;
    else if (
time is Number)        $time Number(time);
    else if (
time is Date)            $time time.time;
    else if (
time is Termin)        $time time.timestamp;
    else                            
$time Date.parse(String(time));
    
    if(!
isNaN($time))
        for 
each(var termin:Termin in termine) {
            var 
ts:Number termin.timestamp;
            if (
ts <= $time && (!last || ts lastTS)){
                
last termin;
                
lastTS ts;
            }
        }
    return 
last;
}

//Aufruf:
findLastBefore();    //equal to now
findLastBefore("now");
findLastBefore(someDateObject);
findLastBefore(someTimestamp);
findLastBefore(irgendeinTermin);
findLastObject("01/04/2012/12:01"); 
jaja, ich weiss, aber ich tu mich auch im deutschen mit wirklich vernünftigen Funktions- und Variablennamen schwer
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 06-01-2012, 09:47   #5 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
der grösse nach (mit führenden nullen) aufgeschrieben
<termin date="JJJJ/MM/DD HH:II" id="1">Paket1</termin>
kann man sowas 'normal' der grösse nach vergleichen.

zusätzlicher klugschiess ;-)
a) bei unveränderlichen mengen (hier zeichenanzahl) kann man auf die trennzeichen verzichten.
b) wenn doch trennzeichen, dann solche, mit denen man auch sinnvoll splitten kann (siehe das leerzeichen)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (06-01-2012 um 09:59 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS5] Datum ermitteln und vergleichen enky Flash Einsteiger 4 26-04-2011 18:09
Datum ermitteln! mume ActionScript 3 10 14-12-2009 15:48
Datum vom Vortag ermitteln SCHLEIMSPUCKER PHP und MySQL 6 08-03-2006 08:30
Zeitdifferenz aus Datum ermitteln YesNo ActionScript 1 3 22-11-2003 18:33
nochmal was mit einer Liste :-( Scheller ActionScript 1 2 13-01-2003 13:32


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele