Stefan: Zeit- und Tagesabhängig Startseite wechseln

Guten Tag,

in meinem Laden möchte ich zu bestimmten Zeiten auf einem großem Fernseher eine Art "Kundenterminal" laufen lassen, welches auch ein paar Funktionen auf Basis von html bietet (kundenterminal.html)
Wenn ich den Laden abschließe, möchte ich den Fernseher zum Schaufenster drehen und automatisch zu einer bestimmten Zeit soll die kundenterminal.html auf die Seite "werbung.html" wechseln.

Dazu habe ich mir folgendes Java Script zusammen gereimt:

<script type="text/javascript">
  //<![CDATA[
    var heute = new Date();
    var h = curDate.getHours();
    var TagInWoche = jetzt.getDay();
    var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");

if (h >= 19 && h <= 7.5 && Wochentag = Montag || Dienstag || Mittwoch || Donnerstag || Freitag)
    { top.location.href='werbung.html'; }

else if (h >= 14 && h <= 9 && Wochentag = Samstag)
    { top.location.href='werbung.html'; }

else if (Wochentag = Sonntag)
    { top.location.href='werbung.html'; }

//]]>
</script>

Es funktioniert nicht... Meine Öffnungszeiten des Ladens seht ihr ja jetzt, kann mir Jemand helfen? Brauch ich noch ein "else"?
Gleiches Script nur mit anderen Zeiten würde ich natürlich auf der "werbung.html" einbauen, damit morgens wenn ich den Laden wieder aufschließe die "Kundenterminal.html" wieder läuft.

Vielen Dank schon mal !

  1. [latex]Mae  govannen![/latex]

    var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");

    if (h >= 19 && h <= 7.5 && Wochentag = Montag || Dienstag || Mittwoch || Donnerstag || Freitag)

    Heißt: Wenn h >= 19 ist UND h kleiner oder gleich 7.5 UND der Variablen wird der Wert der Variablen Montag zugewiesen (also undefined) oder der Wert der Variablen Dienatag ist nicht falsy (also undefined, "", 0, null, false) oder der Wert der Variable Mittwoch ist nicht falsy oder der Wert der Variable Donnerstag ist nicht falsy oder der Wert der Variable Freitag ist nicht falsy

    Zum einen wird getHours() garantiert nichts anderes als Ganzzahlen liefern, womit der Vergleich h <= 7.5 schon unsinnig ist bzw. auch um 07:59 noch gilt. Ansonsten willst du garantiert nicht die Variablen Montag, Dienstag etc. verwenden, sondern Zeichenketten.

    Wochentag = Montag ist in mehrfacher Hinsicht völlig falsch:

    Du vergleichst nicht, sondern weist der Variablen Wochentag den Wert der bisher noch nicht belegten Variablen Montag zu. Also undefined

    Du erhältst also bei alert(Wochentag) das Ergebnis undefined.

    Schlimmer noch: Das Array mit den Wochentag-Namen ist in diesem Moment überschrieben.

    Aber auch der Vergleich Wochentag == Montag oder auch die von dir eigentlich gedachte Form Wochentag == "Montag" würde nicht funktionieren, da Wochentag ein Array ist. Du würdest also vergleichen, ob ein Array gleich einer Zeichenkette ist, was garantiert nicht das ist, was du willst.

    Überhaupt ist das ganze Geraffel mit den Namen in diesem Vergleich überflüssig. Weshalb testest du nicht auf den Wochentag-Indes (TagInWoche)?

    if ( ..... && (TagInWoche == 1 || TagInWoche == 2)) { (beachte die zusätzlichen Klammern)

    Für den Rest des Codes und genauere Analyse hab ich leider gerade keine Zeit mehr.

    Stur lächeln und winken, Männer!
    Kai

    --
    Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
    in Richtung "Mess up the Web".(suit)
    SelfHTML-Forum-Stylesheet
    1. @@Kai345:

      nuqneH

      if (h >= 19 && h <= 7.5 && Wochentag = Montag || Dienstag || Mittwoch || Donnerstag || Freitag)

      Heißt:

      invalid assignment left-hand side. (&& bindet stärker als =; und h >= 19 && h <= 7.5 && Wochentag kann man keinen Wert zuweisen, das darf also nicht links vom Gleichheitszeichen stehen.)

      Und selbst wenn (Wochentag = Montag || Dienstag || Mittwoch || Donnerstag || Freitag) nochmal geklammert wäre:

      Wenn h >= 19 ist UND h kleiner oder gleich 7.5

      Das ergibt immer false, da keine Zahl ≥ 19 und gleichzeitig auch ≤ 7.5 sein kann. Damit wird der Teil hinter dem zweiten && gar nicht mehr ausgeführt. Und selbst wenn:

      UND der Variablen wird der Wert der Variablen Montag zugewiesen (also undefined) oder der Wert der Variablen Dienatag ist nicht falsy (also undefined, "", 0, null, false) oder der Wert der Variable Mittwoch ist nicht falsy oder der Wert der Variable Donnerstag ist nicht falsy oder der Wert der Variable Freitag ist nicht falsy

      Nein. Das heißt UND der erste nicht-falsy Wert von Montag, Dienstag, Mittwoch, Donnerstag; wenn es keinen solchen gibt, dann der Wert von Freitag (außerdem wird dieser so ermittelte Wert auch der Variablen Wochentag zugewiesen).

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
    2. Hallo Kai,

      was hälst du davon?

      <script type="text/javascript">
      var jetzt = new Date();
      var Std = jetzt.getHours();
      var TagInWoche = jetzt.getDay();
      var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch",
                                "Donnerstag", "Freitag", "Samstag");

      if (Std >= 19 && Std < 7 && (TagInWoche == 1 || TagInWoche == 2 || TagInWoche == 3 || TagInWoche == 4 || TagInWoche == 5))
      {  top.location.href='werbung.html' }

      else if (Std >=14 && Std < 9 && (TagInWoche == 6))
      {  top.location.href='werbung.html' }

      else if (TagInWoche == 0)
      {  top.location.href='werbung.html' }

      </script>

      1. dies lässt sich leicht verkürzen auf

        <script type="text/javascript">  
        var jetzt = new Date;  
        var Std = jetzt.getHours();  
        var TagInWoche = jetzt.getDay();  
        if ((Std > 18 && Std < 7 && TagInWoche > 0 && TagInWoche < 6) || (Std > 13 && Std < 9 && TagInWoche == 6) || TagInWoche == 0))  
         top.location.href='werbung.html'  
        </script>
        

        (wozu sollten die Wochentage eigentlich dienen?)

        1. Hi!

          dies lässt sich leicht verkürzen auf

          <script type="text/javascript">

          var jetzt = new Date;
          var Std = jetzt.getHours();
          var TagInWoche = jetzt.getDay();
          if ((Std > 18 && Std < 7 && TagInWoche > 0 && TagInWoche < 6) || (Std > 13 && Std < 9 && TagInWoche == 6) || TagInWoche == 0))
          top.location.href='werbung.html'
          </script>

            
          Es lässt sich noch mehr verkürzen auf:  
            
          
          > ~~~javascript
          
          <script type="text/javascript">  
          
          > </script>
          
          

          Und selbst das kann man weglassen. Ein Wert kann nie größer als eine bestimmte Zahl sein und gleichzeitig kleiner als eine kleinere Zahl. Wird aber schon seit gestern ignoriert ...

          Lo!

          1. <script type="text/javascript">

            var jetzt = new Date;
            var Std = jetzt.getHours();
            var TagInWoche = jetzt.getDay();
            if ((Std > 18 && Std < 7 && TagInWoche > 0 && TagInWoche < 6) || (Std > 13 && Std < 9 && TagInWoche == 6) || TagInWoche == 0))
            top.location.href='werbung.html'
            </script>

            
            >   
            > Es lässt sich noch mehr verkürzen auf:  
            >   
            > > ~~~javascript
            
            <script type="text/javascript">  
            
            > > </script>
            
            

            nicht ganz, du übersiehst den Sonntag

            an anderen Tagen hast du Recht, es sollte wohl eher so aussehen:

            if (((Std > 18 || Std < 7) && TagInWoche > 0 && TagInWoche < 6) || ((Std > 13 || Std < 9) && TagInWoche == 6) || TagInWoche == 0))

            1. Hi!

              nicht ganz, du übersiehst den Sonntag

              War ein Aufmerksamkeitstest ...

              if (((Std > 18 || Std < 7) && TagInWoche > 0 && TagInWoche < 6) || ((Std > 13 || Std < 9) && TagInWoche == 6) || TagInWoche == 0))

              Wenn 19 Uhr gewünscht ist, dann ist > 18 zwar prinzipiell richtig, doch wenn da >= 19 steht, kommt der Wunsch 19 Uhr viel besser zur Geltung. Und es war 7:30 als andere Umschaltzeit gewünscht, aber das können wir ja zum Üben dem OP überlassen.

              Lo!

              1. Wenn 19 Uhr gewünscht ist, dann ist > 18 zwar prinzipiell richtig, doch wenn da >= 19 steht, kommt der Wunsch 19 Uhr viel besser zur Geltung.

                mag sein, da aber andere Werte als ...18,19... nicht auftreten nehme ich in solchen Fällen grundsätzlich die kürzere Variante

  2. var heute = new Date();
        var h = curDate.getHours();
        var TagInWoche = jetzt.getDay();

    hier arbeitest du mit 3 verschiedenen Date-Objekten

  3. Guten Tag,

    erst einmal Vielen Dank für eure Antworten. Ihr habt mein zusammengewuselten Code ja ganz schön analysiert und beleidigt :( Nagut, ich kann eigentlich nichts auf dem Gebiet wie Ihr gemerkt habt. Leider habe ich jedoch noch wenig von euch erfahren wie ich nun weiter vorgehen soll.
    Also noch mal zudem was ich meinen Kunden anbieten möchte:

    • Seite1 (kundenterminal.html) läuft hauptsächlich
    • von Seite1 wird nur auf Seite2 (werbung.html) weitergeleitet wenn nicht die folgenden Ladenöffnungszeiten vorliegen:
      montags-freitags: 07:30 Uhr - 19:00 Uhr
      samstags: 09:00 Uhr - 14:00 Uhr
    • Da bisher Seite2 (Werbung) nicht weiß wann Sie wieder auf Seite1 (Kundenterminal) zurück leiten soll, muss hier das gleiche Script mit anderen Zeiten eingebunden werden, richtig?

    Das klingt jetzt ein klein wenig unverschämt aber wenn mal Jemand Zeit hat, kann er mir nur mal den richtigen Programmieransatz fertig machen?

    Ich wäre euch sehr verbunden.

    Gruß,

    Stefan

    1. Bounjoun Stefan,

      Also noch mal zudem was ich meinen Kunden anbieten möchte:

      • Seite1 (kundenterminal.html) läuft hauptsächlich
      • von Seite1 wird nur auf Seite2 (werbung.html) weitergeleitet wenn nicht die folgenden Ladenöffnungszeiten vorliegen:
        montags-freitags: 07:30 Uhr - 19:00 Uhr
        samstags: 09:00 Uhr - 14:00 Uhr
      • Da bisher Seite2 (Werbung) nicht weiß wann Sie wieder auf Seite1 (Kundenterminal) zurück leiten soll, muss hier das gleiche Script mit anderen Zeiten eingebunden werden, richtig?

      JavaScript-Code wird beim Laden der Seiten ausgeführt. Funktionen, die mittels Event-Handler aufgerufen werden, »warten« eben auf das entsprechende Event. Wie soll dann JavaScript wissen, dass es bereits 19.00 Uhr oder schon 7.30 Uhr ist? Wie soll ein Event stattfinden, wenn die Seiten nicht von Usern besucht und dementsprechend interaktiv bedient werden?

      Für die Zeitsteuerung gibt es in JavaScript implementierte Funktionen: setTimeout() und setInterval().

      Der Zeitparameter wird in Millekunden angegeben. Ein »timeout« von 11,5 Stunden für die Anzeigedauer an Werktagen wäre also: 11,5*60*60*1000 = 41400000 Millisekunden. Die Anzeigedauer der Werbeseite nachts von 19 bis 7.30 Uhr entspricht 12,5 Stunden, also genau 3600 Sekunden mehr, also 3600000 Millisekunden mehr: 45000000.

      Ein solcher Timeout setzt voraus, dass du die eine Seite pünktlich um 7.30 Uhr aufrufst (oder die Nachtseite pünktlich um 19.00 Uhr), was sicher kaum zu bewerkstelligen ist.

      Du kannst natürlich die Seite mehrmals am Tag refreshen (beschäftige dich mit location.href(), das du eh für die Weiterleitung brauchen wirst, die aktuelle Uhrzeit mit den Methoden des date()-Objekt abfragen, und den Timeout neu berechnen und neu setzen.

      Hast du auch schon an Feiertage gedacht?

      Das klingt jetzt ein klein wenig unverschämt aber wenn mal Jemand Zeit hat, kann er mir nur mal den richtigen Programmieransatz fertig machen?

      Das sind schon ein paar Ansätze, andere »Kollegen™« werden sicher etwas dazu beisteuern oder bessere Ideen beitragen. Ein fertiges Skript könnte der eine oder andere sicher auch schreiben, das wird aber eine Frage des Preises sein. Bist ja schließlich Gewerbetreibender... :)

      Adiou.

      --
      Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
      Ist Rudi Carrell Gott? Oder George Harrison Ford?
      Ich bin faul und das ist gut so.
      1. Bounjoun Jean-Max,

        Millekunden...

        ...sind derzeit noch Wunschdenken... auch wenn bekannt sein dürfte, dass ich die Milliarde Umsatz anpeile... :)

        Adiou.

        --
        Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
        Ist Rudi Carrell Gott? Oder George Harrison Ford?
        Ich bin faul und das ist gut so.
      2. Hi!

        Du kannst natürlich die Seite mehrmals am Tag refreshen

        Braucht man nicht. Es reicht, in Intervallen (minütlich vielleicht) nach der Zeit zu schauen. Ist schon so weit? Dann wechseln, ansonsten nächstes Intervall abwarten.

        Lo!

        1. Hallo,

          Du kannst natürlich die Seite mehrmals am Tag refreshen
          Braucht man nicht.

          natürlich nicht - es wäre aber auch nicht schlimm, jedesmal den gewünschten Wert an location.href zuzuweisen. Schließlich findet nur dann ein neuer Request statt, wenn dieser Wert sich *geändert* hat.

          Ciao,
           Martin

          --
          Die letzten Worte des Privatdetektivs:
          Jetzt wird es mir klar: SIE sind der Mörder!
          Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
          1. Hi!

            Du kannst natürlich die Seite mehrmals am Tag refreshen
            Braucht man nicht.
            natürlich nicht - es wäre aber auch nicht schlimm, jedesmal den gewünschten Wert an location.href zuzuweisen. Schließlich findet nur dann ein neuer Request statt, wenn dieser Wert sich *geändert* hat.

            Eigentlich ist ein Refresh auch auf die selbe URL nicht ganz verkehrt. Kommt drauf an, was man will. Wenn die Refreshs in ausreichendem Abstand kommen, bringt das den Server nicht um (selbst wenn sie schneller kommen auch nicht gleich). Aber man könnte dann Updates auf den Server legen, die sich der Client nach kurzer Zeit von selbst holt. In dem Fall ginge auch Meta-Refresh (vielleicht 5 Minuten) mit sofortigem Scriptstart.

            Lo!

            1. Bounjoun dedlfix,

              Eigentlich ist ein Refresh auch auf die selbe URL nicht ganz verkehrt. Kommt drauf an, was man will. Wenn die Refreshs in ausreichendem Abstand kommen, bringt das den Server nicht um (selbst wenn sie schneller kommen auch nicht gleich). Aber man könnte dann Updates auf den Server legen, die sich der Client nach kurzer Zeit von selbst holt. In dem Fall ginge auch Meta-Refresh (vielleicht 5 Minuten) mit sofortigem Scriptstart.

              Nach den Beschreibungen des OP bin ich nicht von einem Server ausgegangen, sondern davon, dass die Webseiten (vielleicht sogar im Kiosk-Modus) ganz einfach auf einem Personal Computer laufen.

              Stünde ein Server zur Verfügung, gäbe es sicher viele bessere Möglichkeiten (PHP, Perl, Cronjob).

              Adiou.

              --
              Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
              Ist Rudi Carrell Gott? Oder George Harrison Ford?
              Ich bin faul und das ist gut so.
              1. Es ist kein Kiosk aber das Betriebsystem eines Servers steht trotzdem nicht zur Verfügung. Die Rechner der Kundenterminal stehen ganz unabhängig voneinander und sind nur am Netzwerk, damit ich mal die neuen Daten der Feiertage reinschreibe oder eine aktuelle .swf Datei der Werbung.html Seite austauschen kann.

                1. Hi!

                  Die Rechner der Kundenterminal stehen ganz unabhängig voneinander und sind nur am Netzwerk, damit ich mal die neuen Daten der Feiertage reinschreibe oder eine aktuelle .swf Datei der Werbung.html Seite austauschen kann.

                  Auch gut, dann doch mit Intervall, Umschalten bei bestimmter Zeit und ansonsten nichts tun.

                  Lo!

                  1. Aber wie bekomm ich jetzt nur das Datum aus dem Datumsobjekt, damit ich dieses mit einem Datum aus dem Array "Feiertag" vergleichen kann?

                    1. Hi!

                      Aber wie bekomm ich jetzt nur das Datum aus dem Datumsobjekt, damit ich dieses mit einem Datum aus dem Array "Feiertag" vergleichen kann?

                      Mit der dafür vorgesehenen Methode des http://de.selfhtml.org/javascript/objekte/date.htm@title=Datumsobjekts. Wie man Wochentag und Stunde ermittelt, kennst du ja schon. Zumindest hast du es bereits in deinem Code angewendet. Mit dem Tag des Monats ist es ähnlich wie mit dem Tag der Woche. Die beiden Methoden stehen auch in der alphabetischen Auflistung untereinander.

                      Lo!

                2. @@Stefan :

                  nuqneH

                  Es ist kein Kiosk aber das Betriebsystem eines Servers steht trotzdem nicht zur Verfügung.

                  Bräuchtest du aber wohl, besonders _dessen_ Uhrzeit. JavaScript ist hier nicht die richtige Technologie, da JavaScript mit der _beim Nutzer_ eingestellten (lokalen) Uhrzeit operiert.

                  Ein Nutzer aus Neuseeland kommt außerhalb der Öffnungszeiten auf die Seite, anhand _seiner_ Uhrzeit mein das Script aber, der Shop wäre offen. Oder andersrum.

                  Zumindest solltest du also diejenigen http://de.selfhtml.org/javascript/objekte/date.htm@title=Methoden verwenden, die 'UTC' im Namen haben. Und die Öffnungszeiten in UTC umrechnen, aber Vorsicht: Die Öffnungszeiten sind während MESZ (Sommerzeit, +02:00) und MEZ (+01:00) in UTC anders, nämlich um eine Stunde verschoben.

                  Aber auch damit bist du nicht gefeit dagegen, dass die Uhr auf dem Rechner eines Besuchers falsch geht oder der seine Uhr absichtlich verstellt.

                  Dein Konzept erscheint mir fragwürdig. Ich glaube, du brauchst eine serverseitige Lösung, bei der dieselben Öffnungszeiten für alle Besucher gelten.

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
                  1. Bounjoun Gunnar Bittersmann,

                    da JavaScript mit der _beim Nutzer_ eingestellten (lokalen) Uhrzeit operiert.

                    Ist in dem Fall unwesentlich, da die Webseite(n) in »dem OP seinem Laden« auf »dem OP seinem/n Computer/n« »laufen«... ;)

                    Ein Nutzer aus Neuseeland kommt

                    da gar nicht heran...

                    Abgesehen davon ist/sind dein Einwand/wände (was für Wände?) für den Fall einer im Web veröffentlichten Seite berechtigt. Ich dachte aber, ein Gunnar Bittersmann liest alle Antworten, bevor er postet.

                    Adiou.

                    --
                    Ich bin eigentlich ganz anders, aber ich komme so selten dazu. - Ödön von Horwáth
                    Ist Rudi Carrell Gott? Oder George Harrison Ford?
                    Ich bin faul und das ist gut so.
                    1. Om nah hoo pez nyeetz, Jean-Max!

                      Abgesehen davon ist/sind dein Einwand/wände (was für Wände?) für den Fall einer im Web veröffentlichten Seite berechtigt. Ich dachte aber, ein Gunnar Bittersmann liest alle Antworten, bevor er postet.

                      und vor allem das OP ;-)

                      Matthias

                      --
                      1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
                3. Om nah hoo pez nyeetz, Stefan !

                  Es ist kein Kiosk

                  Mit Kiosk ist kein Zeitungskiosk sondern der Kiosk-Mode, in deinem Fall sogar so extrem, dass der Nutzer zu bestimmten Zeiten nur den Bildschirm betrachten kann, wenn ich dich richtig verstanden habe.

                  Matthias

                  --
                  1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
      3. Hi,

        danke für den Hinweis mit dem Feiertagen!

        Ich glaube mein Script funktioniert soweit auch wenn es hier einige nicht für möglich gehalten hätten.

        Also für die Feiertage leg ich ein neues Array an mit den Datumsangaben, richtig?
        Muss ich "jetzt" mit "Feiertag" vergleichen?
        Wie bekomme ich dazu aus dem Datumsobjekt nur das Datum raus um dieses mit
        dem Datum von "Feiertag" zu vergleichen?

        <script type="text/javascript">
        var jetzt = new Date();
        var Datum = ??? ();
        var Std = jetzt.getHours();
        var TagInWoche = jetzt.getDay();
        var Wochentag = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch",
                                  "Donnerstag", "Freitag", "Samstag");
        var Feiertag = new Array("3.10.2011", "1.1.2012")

        if (Std >= 19 && Std < 7 && (TagInWoche == 1 || TagInWoche == 2 || TagInWoche == 3 || TagInWoche == 4 || TagInWoche == 5))
        {  top.location.href='werbung.html' }

        else if (Std >=14 && Std < 9 && (TagInWoche == 6))
        {  top.location.href='werbung.html' }

        else if (TagInWoche == 0)
        {  top.location.href='werbung.html' }

        else if ??? (Feiertag == 0 || Feiertag == 1)
        {  top.location.href='werbung.html' }

        </script>

    2. @@Stefan:

      nuqneH

      Ihr habt mein zusammengewuselten Code ja ganz schön analysiert und beleidigt :(

      Ach was.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)