Zeiterfassung
Zeiterfassung – selbst gehostet, für dich und dein Team
Stempeluhr-Apps gibt es viele – meist in der Cloud, mit Abo und mit der Frage, wo die eigenen Arbeitszeiten eigentlich landen. Ich wollte eine Zeiterfassung, die auf meinem eigenen Server läuft, ohne Abhängigkeiten auskommt und trotzdem das kann, was im Alltag wirklich zählt: Einstempeln per Klick, Gleitzeitkonto, Urlaubsplanung und eine saubere Auswertung.
Herausgekommen ist eine schlanke PHP-Anwendung, die ich hier gerne mit dir teile – als freie Software unter der GNU AGPL-3.0.
Was die App kann
Stempeln
- Start/Stop per Button, auch am Smartphone (lässt sich als Web-App auf den Homescreen legen)
- Live-Anzeige: heute gearbeitet, noch offene Zeit und voraussichtlicher Feierabend – inklusive noch fehlender Pflichtpause
- Vergessen auszustempeln? Die App merkt es am nächsten Tag und fragt nach der Endzeit
- Schnellerfassung für heute: Gleitzeit, Urlaub oder Krank – Vormittag, Nachmittag oder ganzer Tag
Pausen nach Arbeitszeitgesetz
- Fehlt beim Ausstempeln die Mindestpause (§ 4 ArbZG: 30 Min. ab 6 h, 45 Min. ab 9 h), schlägt die App eine Pause vor und fügt sie auf Wunsch ein
- Die Pausenregeln sind pro Benutzer einstellbar
- Hinweis bei mehr als 10 Stunden am Tag
Arbeitszeitmodelle
- Wochenstunden gleichmäßig auf 4, 5 oder 6 Tage verteilen – oder feste Stunden je Wochentag (Teilzeit)
- Modelle mit „Gültig ab“-Datum: Wechselst du in Teilzeit, bleiben frühere Monate korrekt berechnet
Auswertung
- Woche, Monat, Jahr oder freier Zeitraum – nach Tagen, Wochen oder Monaten
- Soll/Ist-Diagramm, Verlauf des Gleitzeitsaldos und eine Liste mit Beginn, Ende, Pause und Saldo
- Export als CSV (Excel-tauglich) und Druckansicht/PDF
Urlaub, Feiertage & Ferien
- Urlaubsplaner mit Jahreskalender, Anspruch, Übertrag und Resturlaub; halbe Tage, Krank, Sonderurlaub, Gleittag
- Gesetzliche Feiertage aller 16 Bundesländer werden automatisch berechnet
- Schulferien per Klick importierbar (OpenHolidays API)
- Betriebliche freie Tage, z. B. Heiligabend oder Silvester
- Optional: Abwesenheiten aus einem CalDAV-Kalender übernehmen, z. B. aus Nextcloud
Zeitzuschläge
- Prozentsätze für Samstag, Sonntag, Feiertag, Weihnachten/1. Mai und Nacht frei einstellbar
- Wahlweise als Zeitgutschrift aufs Gleitzeitkonto oder nur zum Ausweisen
Mehrbenutzer
- Ein Admin legt Benutzer an, jeder sieht nur seine eigenen Daten
- Admins können Auswertungen und Konten aller Benutzer einsehen und korrigieren
Voraussetzungen
- Webserver mit PHP 8.1 oder neuer (getestet mit Apache, z. B. unter KeyHelp)
- MariaDB 10.5+ oder MySQL 8
- PHP-Erweiterungen: pdo_mysql, curl, openssl, mbstring
- Keine Composer-Pakete, kein Node.js, keine externen Bibliotheken
Installation
-
ZIP herunterladen, entpacken und in dein Webverzeichnis hochladen.
-
Datenbank anlegen und das Schema importieren:
mysql -u zeiterfassung -p zeiterfassung < install/schema.sql -
Konfiguration anlegen und einen Schlüssel erzeugen:
cp config.sample.php config.php php -r 'echo bin2hex(random_bytes(32)), PHP_EOL;'Den ausgegebenen Wert als
app_keyin dieconfig.phpeintragen, dazu die Datenbank-Zugangsdaten. -
https://deine-domain/setup.phpaufrufen und den ersten Benutzer anlegen – er wird automatisch Administrator. -
Eigenes Logo hinterlegen:
assets/logo.svgdurch dein Logo ersetzen (gleicher Dateiname). -
Optional einen täglichen Cronjob einrichten (Kalender-Sync und Ferienimport):
/usr/bin/php /pfad/zur/zeiterfassung/cron/sync.php
Eine .htaccess für Apache liegt bei und sperrt Konfiguration und interne Verzeichnisse. Wenn du nginx nutzt, musst du das selbst nachbauen.
Update von Version 1.0
mysql -u zeiterfassung -p zeiterfassung < install/upgrade-1.1.sql
Danach die Dateien ersetzen – deine config.php bleibt erhalten.
Datenschutz
Alle Daten bleiben auf deinem Server. Es gibt kein Tracking und keine Telemetrie. Externe Verbindungen entstehen nur, wenn du sie auslöst: beim Import der Schulferien (openholidaysapi.org) und beim Abgleich mit deinem eigenen Kalender. Passwörter werden gehasht gespeichert, das CalDAV-App-Passwort verschlüsselt.
Wichtige Hinweise
- Zeitzuschläge: Einen allgemeinen gesetzlichen Anspruch auf Sonntags- oder Feiertagszuschläge gibt es nicht. Welche Sätze für dich gelten, regeln dein Tarif- oder Arbeitsvertrag. Die App rechnet nur mit den Werten, die du einträgst.
- Keine Rechtsberatung: Die Pausenprüfung orientiert sich am Arbeitszeitgesetz, ersetzt aber keine Prüfung im Einzelfall.
- Bekannte Grenzen: Wiederkehrende Kalendertermine werden beim CalDAV-Import übersprungen. Ein Verfall von Resturlaub (z. B. zum 31.03.) ist nicht abgebildet. Regional begrenzte Feiertage legst du als betrieblichen freien Tag an.
Lizenz
Die Zeiterfassung ist freie Software unter der GNU Affero General Public License v3.0 (AGPL-3.0-only). Der vollständige Lizenztext liegt als LICENSE im ZIP.
- Du darfst die App nutzen, verändern und weitergeben – privat wie beruflich.
- Veränderungen bleiben offen: Gibst du eine veränderte Fassung weiter oder stellst sie anderen über das Netz zur Verfügung, muss sie ebenfalls unter der AGPL-3.0 stehen und ihr Quellcode zugänglich sein. Den Link „Quellcode“ im Footer stellst du dafür in der
config.phpübersource_urlein. - Zusätzliche Bedingung (§ 7 b AGPL-3.0): Der Urheberhinweis „Mit ♥ gemacht in Paderborn“ mit Link auf www.alexnolte.de im Footer sowie die Datei
NOTICEmüssen erhalten und sichtbar bleiben. Eigene Hinweise wie „angepasst von …“ darfst du gerne ergänzen. - Keine Gewährleistung: Die Software wird ohne jede Gewährleistung bereitgestellt.
Download
Download: zeiterfassung-1.1.zip
Dies ist ein privates Projekt ohne Support-Anspruch – über Rückmeldungen, Fehlerberichte und Ideen freue ich mich aber jederzeit.





