ngutschek
Goto Top

Zeitdifferenz über 24 Studnen

Hallo zusammen,

ich benötige ein Script, in dem ich über mehrere Tage berechnen kann.
Ich habe vier Textfelder - Feld1: Datum/Abfahrt; Feld2: Uhrzeit/Abfahrt; Feld3: Datum/Rückkehr; Feld4: Uhrzeit/Rückkehr, am Ende habe ich dann das Feld: Zeit.

Ich habe nun eine Formel, welche mir die Stunden innerhalb eines Tages berechnet.
Allerdings benötige ich hier die Berechnung über mehrere Tage, inkl. der Berücksichtigung von Schaltjahren, evtl. auch Abzug von Feiertagen.´

Ich stehe gerade am Anfang und würde mich über Hilfe sehr freuen!!!!

Anbei nun der momentan eingesetzte Code:
Startzeit aus Feld "Uhrzeit 1" (Format "Zeit HH:MM"):
UhrzeitA1=this.getField("Uhrzeit 1").value;

Endezeit aus Feld "Uhrzeit 5" (Format "Zeit HH:MM"):
UhrzeitE1=this.getField("Uhrzeit 5").value;

Startzeit in Minuten seit 00:00h umrechnen:
var StartZeit = UhrzeitA1.substr(0,2) * 60 + UhrzeitA1.substr(3,2) * 1;

Endezeit in Minuten seit 00:00h umrechnen:
var EndeZeit = UhrzeitE1.substr(0,2) * 60 + UhrzeitE1.substr(3,2) * 1;

Zeitdifferenz in Minuten (auch tagesübergreifend):
var DiffZeit = ((EndeZeit + 24*60) - StartZeit) % (24*60);

ganze Stunden der Dauer:
var DauerH = Math.floor(DiffZeit/60);

Minutenanteil der Dauer:
var DauerM = DiffZeit - (DauerH * 60);

DauerH = "00" + DauerH;
DauerH = DauerH.substr(-2);

DauerM = "00" + DauerM;
DauerM = DauerM.substr(-2);

Ergebnis im Format "hh:mm" zusammensetzen:
event.value = DauerH + ":" + DauerM;

Content-Key: 230624

Url: https://administrator.de/contentid/230624

Printed on: April 24, 2024 at 23:04 o'clock

Member: colinardo
colinardo Feb 21, 2014 updated at 09:40:05 (UTC)
Goto Top
Hallo ngutchek, Willkommen im Forum!
Beispiel wie man es machen könnte:
var startDate = "01.01.2014";  
var startTime = "10:20";  
var endDate = "02.01.2014";  
var endTime = "10:25";  
var dStart  = new Date(startDate.substr(6,4),startDate.substr(3,2)-1,startDate.substr(0,2),startTime.substr(0,2),startTime.substr(3,2),"0");  
var dEnd  = new Date(endDate.substr(6,4),endDate.substr(3,2)-1,endDate.substr(0,2),endTime.substr(0,2),endTime.substr(3,2),"0");  
var diffMilliseconds = Date.parse(dEnd) - Date.parse(dStart);
var diffHours = diffMilliseconds / (1000*60*60);
var diffMinutes = Math.round((diffHours % Math.floor(diffHours)) * 60);
alert ("Die Different beträgt " + Math.floor(diffHours) + " Stunden " + diffMinutes + " Minute(n)");  
Grüße Uwe
Member: ngutschek
ngutschek Feb 21, 2014 at 10:45:29 (UTC)
Goto Top
Vielen Dank für die schnelle Antwort. Allerdings kriege ich den Bezug nicht auf meine Felder.
Ich habe ja keine festen Daten, sondern variierende zum Eingeben.

Lg Natascha
Member: colinardo
colinardo Feb 21, 2014 updated at 10:47:41 (UTC)
Goto Top
Zitat von @ngutschek:
Vielen Dank für die schnelle Antwort. Allerdings kriege ich den Bezug nicht auf meine Felder.
Ich habe ja keine festen Daten, sondern variierende zum Eingeben.
warum ist das ein Problem ? Einfach den Variablen die Eingabewerte aus den Feldern zuweisen ...
Member: ngutschek
ngutschek Feb 21, 2014 at 10:56:36 (UTC)
Goto Top
Das habe ich getan, aber da passiert im Formular nichts. Im Ergebnis aktualisiert sich nichts automatisch.
Member: colinardo
colinardo Feb 21, 2014 updated at 11:02:41 (UTC)
Goto Top
Zitat von @ngutschek:
Das habe ich getan, aber da passiert im Formular nichts. Im Ergebnis aktualisiert sich nichts automatisch.
ähmmm, ich habe jetzt deinen Code nicht übernommen, an deine Situation anpassen musst du das schon selbst.
Führe den Code mal alleine aus, er gibt dann die Differenz in einer Alert-Box aus.
Hier ging es ja ums Prinzip ... den Code lesen solltest du schon mal, deinen ganzen Code habe ich ja nicht hier ...
Member: ngutschek
ngutschek Feb 21, 2014 at 11:02:40 (UTC)
Goto Top
Hmmm... Ich bin halt blutiger Anfänger face-sad
ich arbeite ja in einem PDF Formular.

Der Code ist der komplette den ich oben angegeben habe. Mehr habe ich nicht
Member: colinardo
colinardo Feb 21, 2014 updated at 11:04:23 (UTC)
Goto Top
Zitat von @ngutschek:
ich arbeite ja in einem PDF Formular.
ja das sollte man vorher unbedingt erwähnen !!! Wenn es hier um Javascript geht dachte ich natürlich erst mal an ein Browser-Fomular.
Member: ngutschek
ngutschek Feb 21, 2014 at 11:04:52 (UTC)
Goto Top
Oh entschuldige... Das war mir nicht klar, dass das so einen Unterschied macht.
Member: colinardo
colinardo Feb 21, 2014 updated at 11:10:55 (UTC)
Goto Top
mir fehlen in deinem Code die Felder für das Start- und End-Datum .... am besten schick das Formular via Personal Message dann mach ich dir das direkt darin, sonst wird das hier nichts...
Member: ngutschek
ngutschek Feb 21, 2014 at 11:12:59 (UTC)
Goto Top
Startzeit aus Feld "Uhrzeit 1" (Format "Zeit HH:MM"):
UhrzeitA1=this.getField("Uhrzeit 1").value;
Startdatum aus Feld "Datum 1" (Format "Datum dd/mm/yy"):
DatumA2=this.getField("Datum 1").value;
Endezeit aus Feld "Uhrzeit 5" (Format "Zeit HH:MM"):
UhrzeitE1=this.getField("Uhrzeit 5").value;
Enddatum aus Feld "Datum 5" (Format "Datum dd/mm/yy"):
DatumE2=this.getField("Datum 5").value;

Die Felder stimmen, allerdings habe ich mich bei dem Rest mal allein versucht.
Member: ngutschek
ngutschek Feb 21, 2014 at 11:15:23 (UTC)
Goto Top
Wie kann ich denn ein Formular versenden?
Member: colinardo
colinardo Feb 21, 2014 updated at 11:17:36 (UTC)
Goto Top
Die standen aber oben in deinem Code nicht.... hellsehen kann ich leider noch nicht face-wink
probiers mal hiermit
var startDate = this.getField("Datum 1").value;   
var startTime = this.getField("Uhrzeit 1").value;  
var endDate = this.getField("Datum 5").value;  
var endTime = this.getField("Uhrzeit 5").value;  
var dStart  = new Date(startDate.substr(6,4),startDate.substr(3,2)-1,startDate.substr(0,2),startTime.substr(0,2),startTime.substr(3,2),"0");  
var dEnd  = new Date(endDate.substr(6,4),endDate.substr(3,2)-1,endDate.substr(0,2),endTime.substr(0,2),endTime.substr(3,2),"0");  
var diffMilliseconds = Date.parse(dEnd) - Date.parse(dStart);
var diffHours = diffMilliseconds / (1000*60*60);
var diffMinutes = Math.round((diffHours % Math.floor(diffHours)) * 60);

event.value = Math.floor(diffHours) + ":" + diffMinutes;  
Member: colinardo
colinardo Feb 21, 2014 at 11:18:21 (UTC)
Goto Top
Zitat von @ngutschek:

Wie kann ich denn ein Formular versenden?
Mit der Post ...face-wink
Kommt drauf an wie ...
Member: ngutschek
ngutschek Feb 21, 2014 at 11:23:22 (UTC)
Goto Top
Super, da hat sich jetzt schonmal was getan.....
Vielen Dank dafür.
Jetzt müsste ich nur noch wissen wie ich die Stunden in Tag:Stunden:Minuten umrechnen kann.
Member: colinardo
colinardo Feb 21, 2014 updated at 11:26:35 (UTC)
Goto Top
denke das solltest du jetzt schaffen:
Prinzip: Tage = Runde(Stunden / 24)
Member: ngutschek
ngutschek Feb 21, 2014 at 11:29:20 (UTC)
Goto Top
Ich sage nur AAAAnfäääänger.... Bringe mir das selber bei, aber ich kenne die ganzen Befehle noch garnicht face-sad
Member: colinardo
colinardo Feb 21, 2014 at 11:30:42 (UTC)
Goto Top
Zitat von @ngutschek:
Ich sage nur AAAAnfäääänger.... Bringe mir das selber bei, aber ich kenne die ganzen Befehle noch garnicht face-sad
melde mich später nochmal, muss jetzt erst weg ....
Member: colinardo
colinardo Feb 21, 2014 updated at 13:01:45 (UTC)
Goto Top
Zitat von @ngutschek:
Jetzt müsste ich nur noch wissen wie ich die Stunden in Tag:Stunden:Minuten umrechnen kann.
function dhm(t){
    var cd = 24 * 60 * 60 * 1000,
        ch = 60 * 60 * 1000,
        d = Math.floor(t / cd),
        h = '0' + Math.floor( (t - d * cd) / ch),  
        m = '0' + Math.round( (t - d * cd - h * ch) / 60000);  
    return [d, h.substr(-2), m.substr(-2)].join(':');  
}

var startDate = this.getField("Datum 1").value;   
var startTime = this.getField("Uhrzeit 1").value;  
var endDate = this.getField("Datum 5").value;  
var endTime = this.getField("Uhrzeit 5").value;  
if (startDate != "" && startTime != "" && endDate !="" && endTime !=""){  
    var dStart  = new Date(startDate.substr(6,2),startDate.substr(3,2)-1,startDate.substr(0,2),startTime.substr(0,2),startTime.substr(3,2),"0");  
    var dEnd  = new Date(endDate.substr(6,2),endDate.substr(3,2)-1,endDate.substr(0,2),endTime.substr(0,2),endTime.substr(3,2),"0");  
    var diffMilliseconds = Date.parse(dEnd) - Date.parse(dStart);
    event.value = dhm(diffMilliseconds);
}else{
    event.value = "";  
}
Member: ngutschek
ngutschek Feb 21, 2014 at 12:21:18 (UTC)
Goto Top
Vielen Dank.
Aber ich glaube ich mache irgendwas falsch face-sad
Member: colinardo
colinardo Feb 21, 2014 at 14:36:05 (UTC)
Goto Top
Problem ist ja nun behoben...
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und die Lösungskommentare markieren. Merci.

Grüße Uwe
Member: Winfried-HH
Winfried-HH Feb 22, 2014 updated at 07:14:36 (UTC)
Goto Top
Colinardo, welche Scriptsprache ist das? Und musste es diese Sprache sein? In VBScript hätte ich das Problem einfach mit DateDiff gelöst, der Code wäre glaube ich übersichtlicher gewesen.
Member: colinardo
colinardo Feb 22, 2014 updated at 07:40:07 (UTC)
Goto Top
Zitat von @Winfried-HH:
Colinardo, welche Scriptsprache ist das? Und musste es diese Sprache sein? In VBScript hätte ich das Problem
Schau dir mal die Kategorie und Kommentare an, dann wüsstest du das es hier um JavaScript in einem Acrobat-Formular geht ... und Acrobat kennt kein VBS!

Sicher mit VBS und den integr. Funktionen ist das selbst für Anfänger kein Problem, aber ist nun mal im Acrobat nicht drin...

Grüße Uwe
Member: Winfried-HH
Winfried-HH Feb 22, 2014 at 07:41:25 (UTC)
Goto Top
Schau dir mal die Kategorie und Kommentare an, dann wüsstest du das es hier um JavaScript in einem Acrobat-Formular geht ...

Alles klar ... auf die Kategorie gucke ich fast nie face-sad
Sorry ...