Ich habe es nun doch hinbekommen. Allerdings ist es sehr umständlich. Ich rechne die Zeiten in Sekunden um, dann bilde ich die Summe, dann wird es wieder zurückgerechnet. Außerdem muss das Feld zuerst zu einem Textfeld formatiert werden und danach zu einem Format "Zeit". Falls jemand mal ein ähnliches Problem hat:
function calculateTimeFromSeconds(seconds, format = 'HH:mm:ss') {
if (typeof seconds !== 'number') {
throw new Error('Invalid input: seconds must be a number.');
}
// Ensure seconds is non-negative
seconds = Math.max(0, seconds);
// Extract hours, minutes, and seconds using integer division and modulo
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = seconds % 60;
// Format the time string using the specified format
return format.replace('HH', hours.toString().padStart(2, '0'))
.replace('mm', minutes.toString().padStart(2, '0'))
.replace('ss', secs.toString().padStart(2, '0'));
}
function parseDurationString(durationString) {
if (typeof durationString !== 'string') {
return null; // Handle non-string inputs
}
const parts = durationString.split(':');
if (parts.length !== 3) {
return null; // Handle invalid formats
}
const hours = parseInt(parts[0], 10);
const minutes = parseInt(parts[1], 10);
const seconds = parseInt(parts[2], 10);
if (isNaN(hours) || isNaN(minutes) || isNaN(seconds) ||
hours < 0 || minutes < 0 || minutes >= 60 ||
seconds < 0 || seconds >= 60) {
return null; // Handle invalid values
}
return hours * 3600 + minutes * 60 + seconds;
}
function PauseEintragen(pause){
var app = SpreadsheetApp;
var ss_arbeitszeit =app.getActiveSpreadsheet();
var sheet_arbeitszeit=ss_arbeitszeit.getSheetByName('Arbeitszeit');
var row=sheet_arbeitszeit.getLastRow();
sheet_arbeitszeit.getRange(row,6).setNumberFormat("@");
let zeitAlt = parseDurationString(sheet_arbeitszeit.getRange(row,6).getValue());
let pauseZeit = parseDurationString(pause);
var zeitNeu =zeitAlt+pauseZeit;
// Set the cell value to the calculated time
sheet_arbeitszeit.getRange(row,6).setValue(calculateTimeFromSeconds(zeitNeu));
// Format the cell as time (adjust format as needed)
sheet_arbeitszeit.getRange(row,6).setNumberFormat("HH:mm:ss");
}
PS: Die Variable pause übernehme ich aus einem HTML Fenster und ich habe es so umgebaut, dass die Zeile, in der der Wert eingetragen bzw. ausgelesen wird immer die letzte Zeile ist.