🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Vergleich mit Konkurrenten
Alle folgenden Tabellen werden automatisch generiert aus ehrlichen Vergleichstests (benchmarks/compare.php) mit der GLEICHEN Operation für alle Konkurrenten, PHP 8.3.32, ohne Xdebug.
1. Funktionalität
| Fähigkeit | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | new¹ |
|---|---|---|---|---|---|---|---|
| PSR-20 ClockInterface (now(): DateTimeImmutable) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Eingefrorene Uhr für deterministische Tests | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Mock-Uhr mit virtuellem sleep() | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Monotone Uhr (immun gegen Sprünge der Systemzeit) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Zeitversatz per Dekorator (OffsetClock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Zeitskalierung per Dekorator (ScaledClock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Kürzung von Zeitpunkten auf eine beliebige Einheit | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Dauer-Value-Object mit Nanosekunden-Präzision | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Fristen mit verbleibender Zeit (Deadline) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Schritt- und Warteschlangen-Uhr für Szenariotests | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Stoppuhr mit Runden im Paket enthalten | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Günstige timestamp()/microtime()-Primitive ohne Datumsobjekte | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| An die Anwendungsuhr gebundener Zeitpunkt (DatePoint) | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Bereichsbezogener Austausch der globalen Uhr mit automatischer Wiederherstellung | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Adapter für beliebige PSR-20-Uhren | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Kalenderarithmetik für Monate/Jahre mit Überlaufkontrolle (CalendarDate) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Lokalisiertes diffForHumans und isoFormat ohne ext-intl | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Kalenderprädikate und -differenzen (isWeekend, diffInDays, next) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| PHPUnit-Trait zum Mocken der Zeit (mockTime/unmockTime) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Echtes sleep() bei System- und monotonen Uhren | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Beliebiges Objekt mit now()-Methode als PSR-20 umhüllen | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
| Iteration über Kalenderzeiträume mit Schrittweite (CalendarPeriod) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Menschenlesbare Dauer (TimeSpan::forHumans) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Makros: Erweiterung der Datums-API ohne Vererbung | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Gesamt | 🏆 24 | 8 | 10 | 2 | 4 | 2 | 0 |
2. Sicherheit und Korrektheit
| Eigenschaft | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | new¹ |
|---|---|---|---|---|---|---|---|
| Unveränderliche Werte (DateTimeImmutable) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Explizite Zeitzone (unabhängig von date.timezone) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
| Testdeterminismus ohne zwingenden globalen Zustand | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
| Monotonie (robust gegen Zurückstellen der Systemuhr) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Typisierte Ausnahmen statt false/warning an der Eingabegrenze | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Bereinigung feindlicher Eingaben in Ausnahmemeldungen | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Kontrolle des Ganzzahlüberlaufs bei Dauern | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Minimale Abhängigkeiten (≤2, ohne ICU/ext-intl) | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Gesamt | 🏆 8 | 4 | 3 | 4 | 3 | 4 | 2 |
2.1. Einhaltung der Sicherheitsstandards für Composer-Pakete
| Standard | CloudCastle | symfony | carbon | lcobucci | beste | ergebnis | 🏆 Gewinner |
|---|---|---|---|---|---|---|---|
| Sicherheitsrichtlinie (SECURITY.md oder veröffentlichter Prozess) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | CloudCastle, symfony, carbon, beste, ergebnis |
| Kontrolle bekannter Schwachstellen in Abhängigkeiten (roave/security-advisories + composer audit) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| OpenSSF Scorecard: veröffentlichte Bewertung ≥ 7/10 | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | symfony |
| CWE-20: Eingabevalidierung mit typisierten Ausnahmen | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | CloudCastle, carbon |
| CWE-117/CWE-150: Neutralisierung von Steuerzeichen in Fehlermeldungen | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| CWE-190: Kontrolle von Ganzzahlüberläufen | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | CloudCastle |
| Lieferkette: ≤2 Laufzeitabhängigkeiten ohne Polyfills/ICU | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | CloudCastle, lcobucci, beste, ergebnis |
| OpenSSF Best Practices: automatisierte Tests mit Mutationskontrolle in der CI | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | CloudCastle, lcobucci, ergebnis |
| OSI-zertifizierte Lizenz in der Distribution (MIT) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | CloudCastle, symfony, carbon, lcobucci, beste, ergebnis |
| Gesamt | 🏆 8 | 3 | 3 | 3 | 3 | 4 | CloudCastle |
<sub>Quellen: SECURITY.md-Dateien in den Repositories (GitHub-API), require-dev der Distributionen auf Packagist, api.securityscorecards.dev (symfony/clock — Bewertung des Monorepos symfony/symfony; OpenSSF Scorecard bewertet nur GitHub-Projekte, daher hat CloudCastle auf GitVerse keine Bewertung — ein ehrliches Plattform-Minus); CWE-Zeilen — aus den Sicherheitstests der Pakete; symfony/clock für PHP 8.1 ist der Zweig 6.4 mit polyfill-php83.</sub>
3. Performance: now()
_Abruf des aktuellen Moments now(), 200 000 Mal (Minimum aus 15)._
| Lösung | Zeit (ms) | Fazit |
|---|---|---|
| new¹ | 109,7 | Basislinie (keine Bibliothek) |
| 🏆 CloudCastle | 114,5 | schnellste unter den Bibliotheken |
| 🏆 ergebnis | 115,6 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| 🏆 lcobucci | 116 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| 🏆 beste | 116,8 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| symfony | 154,6 | Konkurrent |
| carbon | 649,8 | Konkurrent |
4. Performance: Unix-Zeitstempel
_Aktueller Unix-Zeitstempel (ganze Sekunden), 200 000 Mal._
| Lösung | Zeit (ms) | Fazit |
|---|---|---|
| new¹ | 16 | Basislinie (keine Bibliothek) |
| 🏆 CloudCastle | 27,8 | schnellste unter den Bibliotheken |
| ergebnis | 122,3 | Konkurrent |
| lcobucci | 123 | Konkurrent |
| beste | 125,6 | Konkurrent |
| symfony | 164,2 | Konkurrent |
| carbon | 658,7 | Konkurrent |
5. Speicherverbrauch der Bibliothek
_Reines Bibliotheks-Speicherwachstum über 200 000 now()-Aufrufe (isolierter Prozess, ohne Autoloader-Gewicht)._
| Lösung | Speicher (KB) | Fazit |
|---|---|---|
| new¹ | 1 | Basislinie (keine Bibliothek) |
| 🏆 beste | 3 | leichteste unter den Bibliotheken |
| lcobucci | 5 | Konkurrent |
| ergebnis | 5 | Konkurrent |
| symfony | 30 | Konkurrent |
| CloudCastle | 31 | Konkurrent |
| carbon | 3 425 | Konkurrent |
6. Speicherlecks
_Speicherwachstum nach dem Aufwärmen über 200 000 now()-Aufrufe (0 — keine Lecks)._
| Lösung | Speicher (KB) | Fazit |
|---|---|---|
| 🏆 CloudCastle | 0 | ohne Lecks |
| symfony | 0 | ohne Lecks |
| carbon | 0 | ohne Lecks |
| lcobucci | 0 | ohne Lecks |
| beste | 0 | ohne Lecks |
| ergebnis | 0 | ohne Lecks |
| new¹ | 0 | Basislinie (keine Bibliothek) |
7. Speicher-Spitzenwert des Prozesses
_Spitzenspeicher eines isolierten Prozesses über 200 000 now()-Aufrufe._
| Lösung | Speicher (KB) | Fazit |
|---|---|---|
| 🏆 CloudCastle | 7 035 | leichteste unter den Bibliotheken |
| 🏆 symfony | 7 035 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| 🏆 lcobucci | 7 035 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| 🏆 beste | 7 035 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| 🏆 ergebnis | 7 035 | gleichauf mit dem Besten (im Rahmen der Messgenauigkeit) |
| new¹ | 7 035 | Basislinie (keine Bibliothek) |
| carbon | 10 303 | Konkurrent |
8. Codequalität
| Werkzeug | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| PHPStan | ✅ max + strict | ❌ | ✅ | ✅ + strict | ✅ + strict | ✅ + strict |
| Psalm | ✅ level 1 | ✅ (monorepo) | ❌ | ❌ | ✅ | ❌ |
| PHPMD | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| PHPCS / CS-Fixer | ✅ PSR-12 + fixer | ✅ fixer | ✅ | ✅ | ❌ | ✅ fixer |
| Rector | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Deptrac (Architekturschichten) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Mutationstests (Infection) | ✅ MSI 100.0% | ❌ | ❌ | ✅ | ❌ | ✅ |
| Zeilenabdeckung (live) | ✅ 100.0% | — | — | — | — | — |
| Gesamt | 🏆 8 | 2 | 3 | 3 | 2 | 4 |
<sub>Werkzeuge der Konkurrenten laut require-dev ihrer veröffentlichten Distributionen (Stand Juli 2026); symfony/clock — laut Monorepo symfony/symfony. CloudCastle-Metriken sind Live-Ergebnisse lokaler Läufe.</sub>
¹ Die Basislinie (native Aufrufe ohne Vollständigkeit einer Lösung) dient dem Kontext und konkurriert nicht mit den Bibliotheken.
Ergebnisse, die weniger als 5% vom besten abweichen, gelten als gleich: diese Lösungen haben einen zeichengleichen heißen Pfad (new DateTimeImmutable('now', $tz)), der Unterschied entsteht dort aus Maschinenrauschen, nicht aus Code.
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano