Rolf B: String mit Uhrzeit und Integer addieren

Beitrag lesen

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