10 KiB
Elpatrons Datumsrechner
Diese moderne Python-Webanwendung (Flask) ermöglicht verschiedene Datumsberechnungen über eine übersichtliche Weboberfläche:
Inhaltsverzeichnis
- Demo
- Funktionen
- Installation (lokal)
- Starten der App
- Statistik-Dashboard & Passwortschutz
- Docker (empfohlen für Produktion)
- REST API
- Progressive Web App (PWA)
- Monitoring & Healthcheck
- Entwicklung & Hinweise
- Automatisierte Tests
- Hinweise
- Lizenz
Demo
Datumsrechner Live: https://date.elpatron.me
Funktionen
- Anzahl der Tage zwischen zwei Daten
- Anzahl der Werktage zwischen zwei Daten
- Anzeige des Wochentags eines Datums
- Datum plus/minus X Tage
- Datum plus/minus X Werktage
- Datum plus/minus X Wochen/Monate
- Kalenderwoche zu Datum
- Start-/Enddatum einer Kalenderwoche eines Jahres
- Statistik-Dashboard mit Passwortschutz unter
/stats
Installation (lokal)
- Python 3.8+ installieren
- Abhängigkeiten installieren:
pip install -r requirements.txt
Starten der App
python app.py
Die App ist dann unter http://localhost:5000 erreichbar.
Statistik-Dashboard (/stats) & Passwortschutz
Das Dashboard ist mit einem statischen Passwort geschützt, das über die Umgebungsvariable STATS_PASSWORD
gesetzt wird.
Beispiel (PowerShell):
$env:STATS_PASSWORD = "meinSicheresPasswort"
python app.py
Für Docker:
$env:STATS_PASSWORD = "meinSicheresPasswort"
docker run -e STATS_PASSWORD=$env:STATS_PASSWORD -p 5000:5000 datumsrechner
Docker (empfohlen für Produktion)
Die App läuft im Container mit dem WSGI-Server Gunicorn:
docker build -t datumsrechner .
docker run -p 5000:5000 datumsrechner
- Gunicorn startet automatisch (siehe Dockerfile)
- Empfohlen für produktiven Einsatz
Log-Verzeichnis mounten (Logs auf dem Host speichern)
Um die Logdateien außerhalb des Containers zu speichern, kannst du das log-Verzeichnis mounten:
PowerShell-Beispiel:
docker run -e STATS_PASSWORD=deinPasswort -p 5000:5000 -v ${PWD}/log:/app/log datumsrechner
docker-compose Beispiel
Erstelle eine Datei docker-compose.yml
:
services:
datumsrechner:
build: .
ports:
- "5000:5000"
environment:
- STATS_PASSWORD=deinPasswort
volumes:
- ./log:/app/log
Starte mit:
docker-compose up --build
REST API
Alle Datumsfunktionen stehen auch als REST-API zur Verfügung. Die API akzeptiert und liefert JSON.
Basis-URL: http://localhost:5000/api/
Hinweis: Die Nutzung der REST API wird im Statistik-Dashboard ausgewertet und als Diagramm angezeigt.
Endpunkte und Beispiele
1. Tage/Werktage zwischen zwei Daten
POST /api/tage_werktage
{
"start": "2024-06-01",
"end": "2024-06-10",
"werktage": true
}
Mit curl:
curl -X POST http://localhost:5000/api/tage_werktage \
-H "Content-Type: application/json" \
-d '{"start": "2024-06-01", "end": "2024-06-10", "werktage": true}'
Antwort:
{ "result": 7 }
2. Wochentag zu einem Datum
POST /api/wochentag
{ "datum": "2024-06-10" }
Mit curl:
curl -X POST http://localhost:5000/api/wochentag \
-H "Content-Type: application/json" \
-d '{"datum": "2024-06-10"}'
Antwort:
{ "result": "Montag" }
3. Kalenderwoche zu Datum
POST /api/kw_berechnen
{ "datum": "2024-06-10" }
Mit curl:
curl -X POST http://localhost:5000/api/kw_berechnen \
-H "Content-Type: application/json" \
-d '{"datum": "2024-06-10"}'
Antwort:
{ "result": "KW 24 (2024)", "kw": 24, "jahr": 2024 }
4. Start-/Enddatum einer Kalenderwoche
POST /api/kw_datum
{ "jahr": 2024, "kw": 24 }
Mit curl:
curl -X POST http://localhost:5000/api/kw_datum \
-H "Content-Type: application/json" \
-d '{"jahr": 2024, "kw": 24}'
Antwort:
{
"result": "10.06.2024 bis 16.06.2024",
"start": "2024-06-10",
"end": "2024-06-16"
}
5. Datum plus/minus Tage, Wochen, Monate
POST /api/plusminus
{
"datum": "2024-06-10",
"anzahl": 5,
"einheit": "tage",
"richtung": "add",
"werktage": false
}
Mit curl:
curl -X POST http://localhost:5000/api/plusminus \
-H "Content-Type: application/json" \
-d '{"datum": "2024-06-10", "anzahl": 5, "einheit": "tage", "richtung": "add", "werktage": false}'
Antwort:
{ "result": "2024-06-15" }
Hinweis:
"einheit"
:"tage"
,"wochen"
oder"monate"
"richtung"
:"add"
(plus) oder"sub"
(minus)"werktage"
:true
für Werktage, sonstfalse
(nur bei"tage"
unterstützt)
6. Statistik
GET /api/stats
Mit curl:
curl http://localhost:5000/api/stats
Antwort:
{
"pageviews": 42,
"func_counts": { "plusminus": 10, "tage_werktage": 5 },
"impressions_per_day": { "2024-06-10": 7 }
}
7. Monitoring & Healthcheck
GET /api/monitor
Mit curl:
curl http://localhost:5000/api/monitor
Antwort:
{
"status": "ok",
"message": "App running",
"time": "2025-07-24T13:37:00.123456",
"uptime_seconds": 12345,
"pageviews_last_7_days": 42
}
Fehlerfälle liefern immer einen HTTP-Statuscode 400 und ein JSON mit "error"
-Feld, z.B.:
{ "error": "Ungültige Eingabe", "details": "..." }
Progressive Web App (PWA)
Elpatrons Datumsrechner ist als PWA installierbar (z.B. auf Android/iOS-Homescreen oder Desktop). Die App funktioniert offline für die Startseite und statische Ressourcen, die Datumsberechnung bleibt serverseitig.
- Manifest und Service Worker sind integriert
- App-Icon und Theme-Color für Homescreen
- Installation über Browser-Menü ("Zum Startbildschirm hinzufügen")
Monitoring & Healthcheck
Die App bietet einen Monitoring-Endpunkt unter /monitor
, der Statusinformationen als JSON zurückgibt (z.B. für Uptime-Robot, Docker Healthcheck oder eigene Tools):
- Status (ok)
- Aktuelle Serverzeit
- Uptime (Sekunden seit Start)
- Pageviews der letzten 7 Tage
Beispiel-Aufruf:
GET https://date.elpatron.me/monitor
Antwort:
{
"status": "ok",
"message": "App running",
"time": "2025-07-24T13:37:00.123456",
"uptime_seconds": 12345,
"pageviews_last_7_days": 42
}
Entwicklung & Hinweise
- Die HTML-Templates liegen im Ordner
templates/
(Trennung von Logik und Darstellung) - Das Projekt ist auf Codeberg gehostet: https://codeberg.org/elpatron/datecalc
- Modernes, responsives Design mit Akkordeon und Icons
Automatisierte Tests
Automatisierte Tests sind mit pytest möglich:
pip install -r requirements.txt
pytest test_app.py
Die Tests prüfen u.a. die Erreichbarkeit der App, die wichtigsten Funktionen und den Schutz vor XSS-Angriffen.
Hinweise
Motivation
Finde mal eine Datumsrechner- Webapp, die nicht völlig Werbe- und Tracking verseucht ist! Da ich sowas häufiger mal brauche, hab ich mir eine eigene gemacht.
Vibe Coding
Dieses Projekt wurde zu nahezu 100% mit Unterstützung künsticher Intelligenz (Vibe Coding) erstellt. Das Grundgerüst war nach ca. 45 Minuten fertig gestellt, insgesamt hat die Entwicklung des Projekts ca. 4 Stunden Zeit beansprucht.
Statistik-Erfassung, Logging
Es werden keine IP-Adressen oder sonstigen persönlichen Daten gespeichert, lediglich die Zahl der Aufrufe der Funktionen in einer kumulierten Darstellung. Die Logdatei enthält nur Einträge der letzten sieben Tage.
Barrierefreiheit (Accessibility)
Elpatrons Datumsrechner ist barrierefrei gestaltet und erfüllt zentrale Anforderungen an Accessibility (a11y):
- Semantische HTML-Struktur: Überschriften, Labels und Formularelemente sind korrekt ausgezeichnet und verknüpft.
- ARIA-Attribute: Accordion und Statusmeldungen sind mit ARIA-Attributen versehen, damit Screenreader die Struktur und Zustände erkennen.
- Tastaturbedienbarkeit: Alle interaktiven Elemente (Accordion, Buttons, Formulare) sind vollständig per Tastatur bedienbar (inkl. Fokus-Indikator und Pfeiltasten-Navigation im Accordion).
- Fokus-Indikatoren: Deutliche visuelle Hervorhebung des Fokus für alle Bedienelemente.
- Farbkontraste: Hohe Kontraste für Texte, Buttons und Ergebnisboxen, geprüft nach WCAG-Richtlinien.
- Status- und Fehlermeldungen: Ergebnisse und Fehler werden mit
aria-live
für Screenreader zugänglich gemacht. - Mobile Optimierung: Zusätzliche Meta-Tags für bessere Bedienbarkeit auf mobilen Geräten und Unterstützung von Screenreadern.
- SEO: Das Thema Barrierefreiheit ist in den Meta-Tags für Suchmaschinen sichtbar.
Damit ist die App für Menschen mit unterschiedlichen Einschränkungen (z.B. Sehbehinderung, motorische Einschränkungen) gut nutzbar und entspricht modernen Webstandards.
Code Statistik
cloc | github.com/AlDanial/cloc v 2.04 T=0.06 s (290.4 files/s, 30411.5 lines/s) |
---|
Language | files | blank | comment | code |
---|---|---|---|---|
Python | 2 | 34 | 26 | 482 |
HTML | 4 | 0 | 5 | 404 |
Markdown | 2 | 108 | 0 | 293 |
JSON | 2 | 0 | 0 | 237 |
CSS | 1 | 0 | 0 | 229 |
JavaScript | 1 | 0 | 0 | 20 |
SVG | 2 | 0 | 0 | 14 |
Dockerfile | 1 | 5 | 6 | 8 |
-------- | -------- | -------- | -------- | -------- |
SUM: | 18 | 148 | 37 | 1700 |
Lizenz
Dieses Projekt steht unter der MIT-Lizenz.
(c) 2025 Markus Busche