WernerK: String mit Uhrzeit und Integer addieren

Hallo ,

von einer Datenbank bekomme ich die variable weekstarttime z.b. als 9:00 zurück. Sie ist als varchar gespeichert. Dann gibt es in der gleichen Tabelle die workinghours als Integer z.b. 9

Jetzt benötige ich auf der Webseite bzw. mit Javascript die Uhrzeit

18:00 also die Startzeit 9:00 plus die working hours 9

So habe ich es versucht, aber da kommt dann ja nur 18 heraus.

var maxtime = parseInt(weekstarttime, 10) + workinghours;

Wie könnte man das besser lösen?

Gruss Werner

  1. Hallo

    von einer Datenbank bekomme ich die variable weekstarttime z.b. als 9:00 zurück. Sie ist als varchar gespeichert. Dann gibt es in der gleichen Tabelle die workinghours als Integer z.b. 9

    Jetzt benötige ich auf der Webseite bzw. mit Javascript die Uhrzeit

    18:00 also die Startzeit 9:00 plus die working hours 9

    So habe ich es versucht, aber da kommt dann ja nur 18 heraus.

    var maxtime = parseInt(weekstarttime, 10) + workinghours;

    Wie könnte man das besser lösen?

    Der Wert von weekstarttime („9:00“) wird offensichtlich zu einer Zahl gemacht, damit JS damit addieren kann. JS addiert also nicht 9:00 + 9, sondern 9 + 9 und das ist – wenig überraschend – 18. Am besten verwendest du das JS-eigene Date-Objekt, mit dem du Datums- und Zeitwerte direkt berechnen kannst. Da lässt sich mit den passenden Funktionen hinten auch ein „echter“ Zeitwert wie 18:00 oder 18:30 herausholen.

    Siehe dazu auch unser Tutorial Zeitberechnung.

    Tschö, Auge

    --
    Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
    Hohle Köpfe von Terry Pratchett
  2. Hallo,

    wie holst Du denn die Daten ab, per PHP?

    lg.

    1. Hallo Lisa,

      ja per PHP.

      LG

      1. Hallo

        ja per PHP.

        Wenn schon während der Ausführung des PHP-Skriptes sowohl die Start- als auch die Arbeitszeit bekannt ist, kannst du die Berechnung der Feierabendzeit auch in PHP ausführen und musst das nicht dem Browser des Besuchers überlassen.

        Tschö, Auge

        --
        Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
        Hohle Köpfe von Terry Pratchett
  3. Hallo Werner,

    JavaScript kennt keinen eigenen Time-Typ, d.h. um die Datums-/Zeit-Funktionen nutzen zu können, muss immer ein Datum dabei sein. Das ist hier lästig, und nötig ist es nur dann, wenn Du Arbeitszeiten hast, während denen die Umschaltung zwischen Sommer- und Winterzeit wichtig ist.

    Wenn der Zeitpunkt des Arbeitsbeginns immer als "hh:mm" geliefert wird, dann sollte es für deinen Anwendungsfall reichen, die Uhrzeit in Sekunden oder Minuten seit Mitternacht umzurechnen und die 9 Stunden darauf zu addieren (also entweder mal 2603600 oder mal 60 nehmen, je nachdem was Du beim Umrechnen tust). Das kannst Du dann durch Division und Restberechnung wieder in einen Zeit-String wandeln. Das korrekte Aufbereiten mit führenden Nullen ist unter JS etwas Fummelei, aber dafür gibt's entweder Libs die Zahlenformatierung mitbringen, die Intl.Numberformat Klasse (sogar im IE11) oder eine kleine handgemachte Funktion oder Klasse.

    // Rechnet einen String im Format hh:mm oder hh:mm:ss in 
    // Sekunden seit Mitternacht um. GIGO-Funktion, keine Plausis!
    function getTimeValue(timeString) {
       var timeParts = timeString.split(':');
    
       var timeValue = timeParts[0] * 3600;
       if (timeParts.length > 1)
          timeValue += timeParts[1] * 60;
       if (timeParts.length > 2)
          timeValue += timeParts[2] * 1;
    
       return timeValue;
    }
    
    function withLeadingZeros(value, length) {
       return value.toString().padStart(length, '0');
    };
    
    function getTimeString(timeValue, withSeconds) {
       var minSec = timeValue % 3600;
       var hours = Math.floor(timeValue / 3600);
       var min = Math.floor(minSec / 60);
       var sec = timeValue % 60;
       
       var result = withLeadingZeros(hours, 2) + ":" + withLeadingZeros(min, 2);
       if (withSeconds)
          result += ":" + withLeadingZeros(timeValue % 60, 2);
       return result;
    }   
    }
    

    Rolf

    --
    sumpsi - posui - clusi
    1. Hallo Rolf,

      Danke für deine Hilfe. Ok, dann muss ich da wohl ein bischen "fummeln" :-)

      Mit deinem Ansatz hoffe ich mal weiter zu kommen.

      viele Grüße

      Werner

    2. Hallo,

      mal 260 nehmen

      Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?

      Gruß
      Kalk

      1. Moin,

        mal 260 nehmen

        Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?

        bingo! Das ist mir vor ein paar tagen auch schon aufgefallen.
        Ich habe mich zwar sehr gewundert, wie Rolf auf die 260 kommt, mir aber eine Bemerkung dazu verkniffen. Vielleicht meinte er 60².

        Ciao,
         Martin

        --
        Ein Tag, an dem du nicht wenigstens einmal gelacht hast, ist ein verlorener Tag.
      2. Hallo Tabellenkalk,

        Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?

        so einen Quatsch habe ich ja noch nie gehört. Es sind natürlich 60 Minuten zu 4 Sekunden, wobei jede dritte Minute eine Langminute zu 5 Sekunden ist, womit sich die 260 Sekunden ganz natürlich ergeben.

        13 Sekunden, ts, wer soll denn damit zurechtkommen?

        Rolf

        (ich hab den Nonsense da oben mal editiert)

        --
        sumpsi - posui - clusi
        1. Hallo,

          Deine Stunde hat 20 Minuten mit jeweils 13 Sekunden?

          so einen Quatsch habe ich ja noch nie gehört. Es sind natürlich 60 Minuten zu 4 Sekunden, wobei jede dritte Minute eine Langminute zu 5 Sekunden ist, womit sich die 260 Sekunden ganz natürlich ergeben.

          niemand hat behauptet, die Regel zur Bestimmung der Schaltminuten sei einfach!

          13 Sekunden, ts, wer soll denn damit zurechtkommen?

          Stimmt, so viele Finger habe ich ja gar nicht ...

          So long,
           Martin

          --
          Angeblich hat jeder Dritte Karies. Mal sehen ... Martin, eins. Rolf, zwei. Steffen, drei.
          Steffen, du hast Karies.
  4. @@WernerK

    von einer Datenbank bekomme ich die variable weekstarttime z.b. als 9:00 zurück.

    Oder z.B. als 9:30. Und schon funktioniert dein parseInt(weekstarttime, 10) nicht; es liefert 9, nicht halb zehn.

    BTW, die Basis 10 ist default, d.h. sie sollte weggelassen werden.

    [Die Uhrzeit] ist als varchar gespeichert.

    ?? Warum nicht als time?

    Dann gibt es in der gleichen Tabelle die workinghours als Integer z.b. 9

    Integer? Und wenn jemand 8½ Stunden arbeitet? Das sollte wohl float sein.

    LLAP 🖖

    --
    „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann
    1. Hallo Gunnar,

      BTW, die Basis 10 ist default, d.h. sie sollte weggelassen werden.

      Nein. Das Default ist „versuche das Zahlensystem zu erraten.“ Das heisst dann:

      • wenn die Zahl mit 0x oder 0X beginnt, nimm das Hexadezimalsystem
      • wenn die Zahl mit 0 beginnt, nimm das Oktalsystem
      • ansonsten nimm das Dezimalsystem

      Und das ist AFAIR zumindest teilweise auch noch Implementationsabhängig. Man sollte immer die Basis angeben.

      LG,
      CK

      1. Und das ist AFAIR zumindest teilweise auch noch Implementationsabhängig. Man sollte immer die Basis angeben.

        ja, das mit dem Oktalsystem ist es definitiv: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#Octal_interpretations_with_no_radix

        1. Hallo stylus,

          ja, das mit dem Oktalsystem ist es definitiv: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt#Octal_interpretations_with_no_radix

          Das rauszusuchen war ich vorhin zu faul 😉 danke.

          LG,
          CK

      2. @@Christian Kruse

        Nein. Das Default ist „versuche das Zahlensystem zu erraten.“ […] Man sollte immer die Basis angeben.

        Sagt der Erklärbär auch.

        LLAP 🖖

        --
        „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann