Javascript für Urlaubstageberechnung

Fragen & Antworten zur Steuerung von 3D Inhalten in PDFs über JavaScript
Antworten
eps
Beiträge: 8
Registriert: 17.04.2018, 15:55

Javascript für Urlaubstageberechnung

Beitrag von eps » 18.01.2023, 13:28

Hallo,
ich war auf der Suche nach einem Script für die Berechnung von Urlaubstagen zwischen zwei Formularfelder mit Datumseingabe.
Da ich nichts gefunden habe, habe ich einen Code zusammengebastelt.
Die Funktionen sind wie folgt:
- Berechnung der Tage zwischen zwei Datum Felder
- Abzug der Tage vom Wochenende im Endergebnis
- Abzug der Feiertage (in meinem Fall für Hessen)

Das einzige was nicht richtig funktioniert ist dass der 24.12 und 31.12 als voller Urlaubstag berechnet wird. :cry:
Wenn dort jemand eine Idee hat wie man die als halbe Tage berechnet lässt wäre ich auf Ideen gespannt. :D

Die Feiertage sind als Liste im Script und können und müssen auf die Tage des jeweiligen Bundeslandes manuell angepasst werden.
Die Feiertage können unter var hessenHolidays angepasst werden.
Aktuell sind die Feiertage für Hessen angelegt.

Ich habe das ganze mit 4 Feldern gelöst:
Feld1= Textfeld mit dem Namen "StartDate", Formatkategorie Datum Benutzerdefiniert dd.mm.yyyy
Feld2= Textfeld mit dem Namen "endDate", Formatkategorie Datum Benutzerdefiniert dd.mm.yyyy
Feld3= Textfeld mit dem Namen "Ergebnis", Formatkategorie Zahlen Dezimalstelle 0
Feld4= Button indem der Skript ausgeführt wird und als Beschriftung "Urlaubstage berechnen" hat

Vielleicht hilft es ja dem einen oder anderen für sein Urlaubsplan Projekt.

So, und hier ist nun der Skript :P :

---------------------------------------------------------------------------------------------------------------------------------------

// start document level functions;

function GetField(oDoc, cField){

var oField = oDoc.getField(cField); // get field object for named field in specified PDF doc;

if(oField == null){

// trap and report error;

app.alert("Field " + cField + " not found.\nCheck for existance of field.", 1, 0, "Field Access Error");

}

return oField; // return field object;

}

function Scand(cFormat, cDateTime){

var oDate = util.scand(cFormat, cDateTime); // convert date string to date object using format;

if(oDate == null){

// trap and report conversion error;

app.alert("Error converting " + cDateTime + " using format " + cFormat, 1, 0, "Date/Time Conversion Error");

}

return oDate;

}

function Date2Days(cFormat, cDateTime){

var nDays = null;

var oDate = Scand(cFormat, cDateTime); // convert to date object;

if(oDate != null){

oDate.setHours(0, 0, 0, 0); // set to midnight;

nDays = Math.floor((oDate.getTime() / (1000 * 60 * 60 * 24))); // convert to whole days;

}

return nDays;

}

// end document level functions;

var nDiffDays = "";

var cDateFormat = "dd.mm.yyyy"; // change as needed to match date field format;

var oStart = GetField(this, "StartDate"); // field for start date;

var oEnd = GetField(this, "endDate"); // field for end date;

if(oStart != null && oStart.value != "" && oEnd != null && oEnd.value != ""){

// compute difference in days;

nDiffDays = Date2Days(cDateFormat, oEnd.value) - Date2Days(cDateFormat, oStart.value);

}
// Array mit den Daten der gesetzlichen Feiertage von Hessen
var hessenHolidays = [
"01.01.2023", // Neujahr
"07.04.2023", // Karfreitag
"10.04.2023", // Ostermontag
"01.05.2023", // Tag der Arbeit
"18.05.2023", // Christi Himmelfahrt
"29.05.2023", // Pfingstmontag
"08.06.2023", // Fronleichnam
"03.10.2023", // Tag der deutschen Einheit
"25.12.2023", // Erster Weihnachtstag
"26.12.2023", // Zweiter Weihnachtstag
"01.01.2024", // Neujahr
"29.03.2024", // Karfreitag
"01.04.2024", // Ostermontag
"01.05.2024", // Tag der Arbeit
"09.05.2024", // Christi Himmelfahrt
"20.05.2024", // Pfingstmontag
"30.05.2024", // Fronleichnam
"03.10.2024", // Tag der deutschen Einheit
"25.12.2024", // Erster Weihnachtstag
"26.12.2024", // Zweiter Weihnachtstag
"01.01.2025", // Neujahr
"18.04.2025", // Karfreitag
"21.04.2025", // Ostermontag
"01.05.2025", // Tag der Arbeit
"29.05.2025", // Christi Himmelfahrt
"09.06.2025", // Pfingstmontag
"19.06.2025", // Fronleichnam
"03.10.2025", // Tag der deutschen Einheit
"25.12.2025", // Erster Weihnachtstag
"26.12.2025" // Zweiter Weihnachtstag
];

// Function to check if a given date is a holiday in Hessen
function isHoliday(date) {
var dateFormatted = util.printd("dd.mm.yyyy", date);
return hessenHolidays.indexOf(dateFormatted) !== -1;
}

// ...

if(oStart != null && oStart.value != "" && oEnd != null && oEnd.value != ""){
// compute difference in days;
var endDate = Scand(cDateFormat, oEnd.value);
endDate.setDate(endDate.getDate() + 1);
nDiffDays = Date2Days(cDateFormat, util.printd(cDateFormat, endDate)) - Date2Days(cDateFormat, oStart.value);
// subtract holidays
var startDate = Scand(cDateFormat, oStart.value);
var holidays = 0;
for (var i = startDate; i <= endDate; i.setDate(i.getDate() + 1)) {
if (isHoliday(i) || i.getDay() === 0 || i.getDay() === 6) {
holidays++;
}
}
nDiffDays -= holidays;
}
GetField(this, "Ergebnis").value = nDiffDays;

----------------------------------------------------------------------------------------------------------------------------------------------------------
Im Anhang ist ein Beispiel dafür zum testen.

Viel Spass damit
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

elsje2002
Beiträge: 41
Registriert: 20.02.2018, 22:13

Re: Javascript für Urlaubstageberechnung

Beitrag von elsje2002 » 15.08.2023, 19:17

Hallo eps,

was bist Du denn für ein Held :) vielen, vielen Dank für das tolle skript und dass Du es hier teilst!!!

Antworten