Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-09-2005, 18:21   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 102
Countdown fehler

habe hier ein countdown für eine schule, im großen und ganzen funktioniert er, aber bei einigen zeiten schätze ich mal das sich die bedingungen überschneiden. Und zwar bei 9:00-9:30 und 10:00-11:15 friert die uhr ein.
Und bei 13:00-13:15 zählt der countdown die seit bis zu 15:00 runter

ActionScript:
  1. /*
  2. Stundenzeiten:
  3.   8:00 -   9:30
  4.   9:45 - 11:15
  5. 11:45 - 13:15
  6. 13:30 - 15:00
  7. */
  8. myDate = new Date();
  9. sek = myDate.getSeconds();
  10. min = myDate.getMinutes();
  11. std = myDate.getHours();
  12. tag = myDate.getDay();
  13.  
  14. sek2 = 59 - sek;
  15.  
  16.     erg = (std2 * 60) + min2
  17.     length(erg) ==2
  18.  
  19. if (std >= 15 || std < 7 || tag == 0 || tag ==6) {
  20.     if (length(min) == 1) {
  21.         min = "0" + min;
  22.     }
  23.     if (length(sek) == 1) {
  24.         sek = "0" + sek;
  25.     }
  26.     anzeige = std + ":" + min + ":" + sek;
  27.     }   
  28.                          else{
  29. // zeit bis zur 1. stunde   8:00
  30.     if (std >= 7 && std <8) {
  31.         min2 = 59 - min;
  32.         std2 = 7 - std;
  33.    
  34.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 1. Stunde" ;
  35.     }
  36.         else{
  37. // zeit bis zur 1. Pause    8:00 - 9:30
  38.         if (std >= 8 && std <= 9 && erg <90) {
  39.             min2 = 29 - min;
  40.             std2 = 9 - std;
  41.  
  42.             anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur Pause" ;
  43.         }
  44.     }
  45. // zeit bis zur 2. stunde   9:30 - 9:45
  46.     if (std == 9 && min >= 30 && min < 45) {
  47.         min2 = 44 - min;
  48.         std2 = 9 - std;
  49.  
  50.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 2. Stunde" ;
  51.     }
  52.     else{
  53. // zeit bis zur 2. Pause    9:45 - 11:15
  54.         if (std >= 9 && std <= 11 && erg <=90) {
  55.             min2 = 14 - min;
  56.             std2 = 11 - std;
  57.  
  58.             anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur Pause" ;
  59.         }
  60.     }
  61. // zeit bis zur 3. stunde   11:15 - 11:45
  62.     if (std == 11 && min >= 15 && min < 45) {
  63.         min2 = 44 - min;
  64.         std2 = 11 - std;
  65.  
  66.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 3. Stunde" ;
  67.     }
  68.     else{
  69. // zeit bis zur 3. Pause    11:45 - 13:15
  70.         if (std >= 11 && std <= 13 && erg <=90) {
  71.             min2 = 14 - min;
  72.             std2 = 13 - std;
  73.  
  74.             anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur Pause" ;
  75.         }
  76.     }
  77. // zeit bis zur 4. stunde   13:15 - 13:30
  78.     if (std == 13 && min >= 15 && min < 30) {
  79.         min2 = 29 - min;
  80.         std2 = 13 - std;
  81.  
  82.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 4. Stunde" ;
  83.     }
  84.     else{
  85. // zeit bis zum schluss 13:30 - 15:00
  86.         if (std >= 13 && std <= 15) {
  87.             min2 = 59 - min;
  88.             std2 = 14 - std;
  89.        
  90.             anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zum Schluss" ;
  91.         }
  92.     }
  93. }
bedanke mich für Lösungen
Boulder Dash ist offline   Mit Zitat antworten
Alt 12-09-2005, 21:13   #2 (permalink)
but not sherlock
 
Registriert seit: May 2004
Ort: Darmstadt
Beiträge: 45
ich hatte keine Lust mir dein Skript durchzulesen. Dafür möchte ich mich mal entschuldigen.

Aber versuch mal eine Variable für minuten zu finden, die nicht gleichzeitig den kleineren Wert von zweien auswertet. (min als Variable dürfte nicht gut gehen)
Holmes ist offline   Mit Zitat antworten
Alt 12-09-2005, 21:34   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 102
Zitat:
Zitat von Holmes
ich hatte keine Lust mir dein Skript durchzulesen. Dafür möchte ich mich mal entschuldigen.

Aber versuch mal eine Variable für minuten zu finden, die nicht gleichzeitig den kleineren Wert von zweien auswertet. (min als Variable dürfte nicht gut gehen)
ok zugegeben, min als var is nen bissel unglücklich gewählt, aber daran liegt es nicht.
und das mit den auswerten von 2 werten müsste eigendlich ok sein. ich denke nur das die if bedingung anderst geschieben werden muss, das da keine überschneidungen (oder was auch immer) mehr drin is
Boulder Dash ist offline   Mit Zitat antworten
Alt 12-09-2005, 21:40   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
sehr fleisig! 6 - setzen ;-)
a) rechne nur mit einer bezugsgrösse. das wären hier z.b. die minuten.
b) samstag, sonntag kannst du auch vorher rausrechnen. an diesen tagen ist die urzeit wohl egal.
c) wehe dir, die zeiten ändern sich. dann musst du dein ganzes programm umstricken. besser ist es, sowas in einem array zu verwalten. da kann man locker mal ne stunde zugeben ;-)
ActionScript:
  1. schulzeit = new Array();
  2. schulzeit.push({bez:'zur 1. Stunde', ab:8*60+00});
  3. schulzeit.push({bez:'zur 1. Pause', ab:9*60+30});
  4. schulzeit.push({bez:'zur 2. Stunde', ab:9*60+45});
  5. schulzeit.push({bez:'zur 2. Pause', ab:11*60+15});
  6. schulzeit.push({bez:'zur 3. Stunde', ab:11*60+45});
  7. schulzeit.push({bez:'zur 3. Pause', ab:13*60+15});
  8. schulzeit.push({bez:'zur 4. Stunde', ab:13*60+30});
  9. schulzeit.push({bez:'zum Unterrichtsende', ab:15*60+00});
  10. //
  11. function fN(zeit, text) {
  12.     var n = zeit == 1 ? '' : 'n';
  13.     return zeit ? zeit+' '+text+n+' ' : '';
  14. }
  15. //
  16. //var jetzt = new Date();
  17. //var min = jetzt.getMinutes();
  18. //var std = jetzt.getHours();
  19. // zum testen:
  20. var std = 10;
  21. var min = 1;
  22. //
  23. var testmin = std*60+min;
  24. var Meldung = 'Feierabend!';
  25. for (var i = 0; i<schulzeit.length; i++) {
  26.     if (testmin<schulzeit[i].ab) {
  27.         min = schulzeit[i].ab-testmin;
  28.         std = int(min/60);
  29.         min -= std*60;
  30.         var Meldung = 'Noch '+fN(std, 'Stunde')+fN(min, 'Minute')+'bis '+schulzeit[i].bez+'.';
  31.         break;
  32.     }
  33. }
  34. trace(Meldung);
fN ergänzt. weil: das heisst nicht 1 Stunden ;-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (12-09-2005 um 21:52 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 12-09-2005, 21:46   #5 (permalink)
but not sherlock
 
Registriert seit: May 2004
Ort: Darmstadt
Beiträge: 45
sehr sehr schön!!!
Das hätte ich in Tagen nicht hinbekommen ... :-)
Holmes ist offline   Mit Zitat antworten
Alt 18-09-2005, 09:02   #6 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 102
Zitat:
Zitat von hgseib
sehr fleisig! 6 - setzen ;-)
a) rechne nur mit einer bezugsgrösse. das wären hier z.b. die minuten.
b) samstag, sonntag kannst du auch vorher rausrechnen. an diesen tagen ist die urzeit wohl egal.
c) wehe dir, die zeiten ändern sich. dann musst du dein ganzes programm umstricken. besser ist es, sowas in einem array zu verwalten. da kann man locker mal ne stunde zugeben ;-)
sorry hat nen bissel länger mit der antwort gedauert...
möchte dir erstmal ganz herzlich danken, is nen super code, aber da ich noch anfänger bin, bleib ich mal bei meiner variante, deinen hebe ich mir mal für später auf .
denke mal das ich das problem jetzt gelöst habe. habe deinen rat mit nur einer bezugsgröße mal zu herzen genommen. und zwar lasse ich die stunden mit einer variablen "zeit2" überprüfen, guckst du hier:
ActionScript:
  1. zeit2 = std add min
so kann keine überschneidung mehr eintreffen... aber obs wirklich funktioniert wird der praxistest zeigen

ps. weiß nicht ob ich nen fehler gemacht habe. aber bei deinen code wird bei jeder zeit "Noch 1 Stunde 14 Minuten" ausgegeben...
Boulder Dash ist offline   Mit Zitat antworten
Alt 18-09-2005, 17:25   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
"..aber bei deinen code wird bei jeder zeit "Noch 1 Stunde 14 Minuten" ausgegeben.."
scharfsinnig beobachtet!
muss wohl daher kommen, das ich die zeiterfassung auskommentiert habe und ZUM TESTEN einen festen wert vorgebe:
//var jetzt = new Date(); <-- die // löschen
//var min = jetzt.getMinutes(); <-- die // löschen
//var std = jetzt.getHours(); <-- die // löschen
// zum testen: <-- löschen
var std = 10; <-- löschen
var min = 1; <-- löschen

"..obs wirklich funktioniert wird der praxistest zeigen.."
aaah ja. du wartest zum testen also immer bis es 12 uhr schlägt? na malzeit :-)))


??? hauptsache du weisst, was du da machst
zeit2 = std add min
also
2 std + 10 min = 12 was?

mein vorschlag war gewesen mit nur einer bezugsgrösse zu arbeiten. also nicht stunden und minuten getrennt behandeln, was solche konstrukte benötigt:
if (std == 11 && min >= 15 && min < 45)
sondern alle zeiten komplett in z.b. minuten umrechnen. also
zeit2 = std*60 + min
2 std *60 + 10 min = 130 minuten

---------------
hab nochmal einen blick auf deinen code geworfen. da tränen mir die augen ;-) als ich nach drei stunde wieder halbwegs klar sehen konnte:
schmeiss diese kontrukte weg!!!
if (..) {
...
} else {
if (...) {
...
}
}

schreib's so
if (..) {...}
if (...) {...}
if (...) {...}
...

oder so
if (..) {...}
else if (...) {...}
else if (...) {...}
else if (...) {...}
...


und es gibt bei dir kein std2??
erg = (std2 * 60) + min2

und was soll das da sein???
length(erg) ==2

dieses erg ist bei dir auch mehr ein 'ärg'ernis als eine sinnvolle funktion? :-)
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (18-09-2005 um 18:07 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 18-09-2005, 19:29   #8 (permalink)
Neuer User
 
Registriert seit: Jul 2005
Beiträge: 102
dank dir noch mal für deine antwort, und tut mir leid dass ich dir solche Kopfschmerzen verursache . Habe das schon öfters zu hören bekommen das meine code´s verwirrend unlogisch und weiß der Geier was noch…

also hatte vor ner Woche mit deinem Code rumgespielt, und selbstverständlich die auskommentierten Sachen wech genommen, aber irgendwie hab ich´s dann doch nicht hinbekommen, aber wie gesagt ich hebe mir den für später auf, momentan is das noch zu viel Stoff für mich… (wollte auch auf gar keinen fall sagen das dass falsch oder so is)

"aaah ja. du wartest zum testen also immer bis es 12 uhr schlägt? na malzeit :-)))"
nein mache ich bestimmt nicht, ich meine nur das man den Rechner in der schule sowie so im blick hat und wenn da was falsch geht dann sieht man das ja, deswechen "Praxistest"…

"??? hauptsache du weisst, was du da machst
zeit2 = std add min
also
2 std + 10 min = 12 was?"
da muss ich dich korrigieren „+“ und „add“ is nicht dasselbe:
nehmen wir 10:12
+ --> 22
add --> 1012
somit kann es nicht mehr zu Überschneidungen durch die min. kommen da man die zeit komplett eingrenzen kann

"und es gibt bei dir kein std2??
erg = (std2 * 60) + min2"
is auch nicht richtig, std2 wird jeweils in der if klammer deklariert, klingt komisch funktioniert aber...

hier nochmal der aktuelle code, is zwar auch nicht das wahre vom ei, aber naja guck einfach selbst, wenn du denkst du braucht ne brille um deine augen vor augenkrebs zu schützen tu dir kein zwang an
ActionScript:
  1. myDate = new Date();
  2. sek = myDate.getSeconds();
  3. min = myDate.getMinutes();
  4. std = myDate.getHours();
  5. tag = myDate.getDay();
  6.    
  7.    
  8. if (length(min) == 1) {
  9.     min = "0" + min;
  10. }
  11.  
  12. zeit2 = std add min
  13. sek2 = 59 - sek;
  14. erg = (std2 * 60) + min2
  15.  
  16. if (zeit2 < 700 || zeit2 >= 1500 || tag == 0 || tag == 6) {
  17.  
  18.     if (length(sek) == 1) {
  19.         sek = "0" + sek;
  20.     }
  21.     anzeige = std + ":" + min + ":" + sek;
  22.     }
  23. else{
  24. // zeit bis zur 1. stunde   8:00
  25.     if (zeit2 >= 700 && zeit2 < 800) {
  26.         min2 = 59 - min;
  27.         std2 = 7 - std;
  28.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 1. Stunde" ;
  29.     }
  30. // zeit bis zur 1. Pause    8:00 - 9:30
  31.     if (zeit2 >= 800 && zeit2 < 930) {
  32.         min2 = 29 - min;
  33.         std2 = 9 - std;
  34.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur Pause" ;
  35.     }
  36. // zeit bis zur 2. stunde   9:30 - 9:45
  37.     if (zeit2 >= 930 && zeit2 < 945) {
  38.         min2 = 44 - min;
  39.         std2 = 9 - std;
  40.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 2. Stunde" ;
  41.     }
  42. // zeit bis zur 2. Pause    9:45 - 11:15
  43.     if (zeit2 >= 945 && zeit2 < 1115) {
  44.         min2 = 14 - min;
  45.         std2 = 11 - std;
  46.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur Pause" ;
  47.     }
  48. // zeit bis zur 3. stunde   11:15 - 11:45
  49.     if (zeit2 >= 1115 && zeit2 < 1145) {
  50.         min2 = 44 - min;
  51.         std2 = 11 - std;
  52.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 3. Stunde" ;
  53.     }
  54. // zeit bis zur 3. Pause    11:45 - 13:15
  55.     if (zeit2 >= 1145 && zeit2 < 1315) {
  56.         min2 = 14 - min;
  57.         std2 = 13 - std;
  58.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur Pause" ;
  59.     }
  60. // zeit bis zur 4. stunde   13:15 - 13:30
  61.     if (zeit2 >= 1315 && zeit2 < 1330) {
  62.         min2 = 29 - min;
  63.         std2 = 13 - std;
  64.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zur 4. Stunde" ;
  65.     }
  66. // zeit bis zum schluss 13:30 - 15:00
  67.     if (zeit2 >= 1330 && zeit2 < 1500) {
  68.         min2 = 59 - min;
  69.         std2 = 14 - std;
  70.         anzeige ="noch " + erg + " min. und " + sek2 + " sek. bis zum Schluss" ;
  71.     }
  72. }

achso das mit length(erg) ==2
war nen überbleibsel von nem versuch, den ich vergessen hatte wieder zu löschen...
Boulder Dash 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 01:28 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele