Zeiten addieren

Fragen & Antworten zur Steuerung von 3D Inhalten in PDFs über JavaScript
Antworten
Nutzer
Beiträge: 6
Registriert: 15.02.2024, 23:40

Zeiten addieren

Beitrag von Nutzer » 16.02.2024, 00:03

Hallo Forengemeinde,

ich bin neu hier und habe auch schon die Forensuche bedient, komme aber mit meinem Problem nicht weiter. Ich habe eine pdf-Datei als Formular erstellt, in der ich zwei Felder habe, in der Zeiten eingetragen werden sollen. In einem dritten Feld soll die Summe dieser Zeiten ausgegeben werden, wobei hier nicht nur 24 Stunden möglich sind und der Tag anschließend neu anfängt, sondern die Gesamtstunden bzw. -minuten interessant sind.
JS-Erfahrung ist bei mir gen Null. Vieles habe ich mir im Internet zusammengesucht, aber auch ChatGPT habe ich zur Unterstützung genommen.
Ich komme aber einfach nicht mit meinem Problem weiter.
Den folgenden Code habe ich bei "Eigenschaften" - "Berechnung" unter "Benutzerdefiniertes Berechnungsskript" eingegeben, allerdings bekomme ich im Feld 3 einfach kein Ergebnis raus. Ich habe das Dokument mal auf das wesentliche reduziert und füge es hier mit bei.

Vielen Dank auch schon im Voraus für die Unterstützung.

Schöne Grüße

Daniel

Code: Alles auswählen

// Funktion, um zwei Zeiten im Format "HH:mm" zu addieren und das Ergebnis zu überprüfen
function addTimeFields() {
  var sportField = this.getField("Feld_1");
  var ausbildungField = this.getField("Feld_2");
  var gesamtField = this.getField("Feld_3");
console.log()
  var sportValue = sportField.value;
  var ausbildungValue = ausbildungField.value;

  // Parse der Zeiten in Stunden und Minuten
  var sportParts = sportValue.split(":");
  var ausbildungParts = ausbildungValue.split(":");

  var sportHours = parseInt(sportParts[0], 10);
  var sportMinutes = parseInt(sportParts[1], 10);

  var ausbildungHours = parseInt(ausbildungParts[0], 10);
  var ausbildungMinutes = parseInt(ausbildungParts[1], 10);

  // Addieren der Stunden und Minuten
  var totalHours = sportHours + ausbildungHours;
  var totalMinutes = sportMinutes + ausbildungMinutes;

  // Überprüfen, ob Minuten größer als 60 sind
  if (totalMinutes >= 60) {
    totalHours += Math.floor(totalMinutes / 60);
    totalMinutes = totalMinutes % 60;
  }

  // Formatieren der Ergebniszeit
  var result = (totalHours < 10 ? "0" : "") + totalHours + ":" + (totalMinutes < 10 ? "0" : "") + totalMinutes;

  // Setzen des Ergebnisses im "Feld_3" Feld
  gesamtField.value = result;


  // Überprüfen, ob das Ergebnis unter 50:00 liegt und das Feld rot hervorheben
  if (totalHours < 50) {
    gesamtField.fillColor = color.red;
  } else {
    gesamtField.fillColor = color.transparent; // Zurücksetzen der Hervorhebung
  }
}

// Funktion aufrufen, wenn die Felder geändert werden
this.getField("Feld_1").onChange = addTimeFields;
this.getField("Feld_2").onChange = addTimeFields;
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Benutzeravatar
bds-oldie
Beiträge: 158
Registriert: 21.02.2019, 10:37

Re: Zeiten addieren

Beitrag von bds-oldie » 08.05.2024, 17:41

Hallo Nutzer,
hier ein Beispiel mit zwei Lösungen. Die ergänzte Lösung stamm aus einem älteren Post.
Mit freundlichen Grüßen
BDS-Oldie
Forum_Rev01-ergänzt.pdf
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Nutzer
Beiträge: 6
Registriert: 15.02.2024, 23:40

Re: Zeiten addieren

Beitrag von Nutzer » 27.05.2024, 21:43

Hallo bds-oldie,

vielen Dank für deine Unterstützung und dein ergänztes Formular.
Leider kann ich deine Programmierung noch nicht ganz für mich bzw. mein Formular reproduzieren, da es in meinem Formular nicht um Tageszeiten sondern um geleistete Stunden geht.
In meinem Beispiel sollen die Stunden aus dem Freizeitbereich mit denen aus der Ausbildungsbereich addiert werden und im Gesamtsummenfeld angezeigt werden.

Beispiel:
Bereich 1 (Feld 1) sind 12:30 (12 Stunden, 30 Minuten) und Bereich 2 (Feld 2) sind 13:44 (13 Stunden, 44 Minuten). Hieraus soll die Gesamtsumme aus Feld 1 und Feld 2 (demnach 26:14) in Feld 3 abgebildet werden.
Ein Datum ist für mich nicht relevant, da es sich hierbei eben nicht um Uhrzeiten handelt.

Kannst du mir hierbei auch helfen?
Vielen Dank im Voraus

Nutzer
Beiträge: 6
Registriert: 15.02.2024, 23:40

Re: Zeiten addieren

Beitrag von Nutzer » 25.07.2024, 16:44

Hallöchen an alle,

ich habe es endlich mal geschafft mich länger mit dem Code zu beschäftigen. Interessanter Weise musste ich den Code von der Datei von bds-oldie entwas anpassen.
1. Ich habe aus der Datei nur die rechten drei Felder verwendet.
2. Der Code wurde wie folgt angepasst:
In der Feldberechnung:

Code: Alles auswählen

// Funktion aufrufen, wenn die Felder geändert werden
event.value = addTimeFields();
Im JavaScript:

Code: Alles auswählen

function addTimeFields()
{
// Funktion, um zwei Zeiten im Format "HH:MM" zu addieren und das Ergebnis zu überprüfen
var sportField        = this.getField("Feld1");
var ausbildungField   = this.getField("Feld2");
var gesamtField       = this.getField("Feld3");
var sportValue        = sportField.value;
var ausbildungValue   = ausbildungField.value;
// Parse der Zeiten in Stunden und Minuten
var sportParts        = sportValue.split(":");
var sportHours        = parseInt(sportParts[0], 10);
var sportMinutes      = parseInt(sportParts[1], 10);
//
var ausbildungParts   = ausbildungValue.split(":");
var ausbildungHours   = parseInt(ausbildungParts[0],10);
var ausbildungMinutes = parseInt(ausbildungParts[1],10);
//
// Addieren der Stunden und Minuten
// 
var totalHours   = sportHours + ausbildungHours;
var totalMinutes = sportMinutes + ausbildungMinutes;
// Überprüfen, ob Minuten größer als 60 sind
if(totalMinutes >= 60)
{
totalHours   += Math.floor(totalMinutes / 60);
totalMinutes = totalMinutes % 60;
}
// Formatieren der Ergebniszeit und Setzen des Ergebnisses im "Feld3" Feld
var result = (totalHours < 10 ? "0" : "") + totalHours + ":" + (totalMinutes < 10 ? "0" : "") + totalMinutes;
gesamtField.value = result;

// Überprüfen, ob das Ergebnis unter 50:00 liegt und das Feld rot hervorheben
if (totalHours < 50)
{
gesamtField.fillColor = color.red;
}
else
{
gesamtField.fillColor = color.transparent; // Zurücksetzen der Hervorhebung
}
}
Hierbei habe ich im Zeilencode beim Addieren der Stunden bzw. Minuten das Subtraktionszeichen durch ein Additionszeichen ersetzt sowie direkt die Variablen der Stunden bzw. Minuten genommen. Bei der Varianten mit der Addition der "(ausbildungParts[1],10);" wurden keine Ziffern addiert, sondern Zeichen, sodass jeweils die Stunden (z. B. 12 und 25) und Minuten (z. B. 12 und 13) zu "1225:1213" addiert wurden.

Leider erhalte ich noch folgenden Fehler:

Code: Alles auswählen

InvalidSetError: Set nicht möglich, ungültig oder unbekannt.
Event.value:2:AcroForm:Feld3:Calculate
Wie kann ich diesen Fehler beheben?

Antworten