🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CalendarDate — travail calendaire au niveau de Carbon
Objectif
Une date calendaire au-dessus de DateTimeImmutable : arithmétique des mois/années avec contrôle du dépassement (addMonthsNoOverflow), bornes de périodes, isoFormat et diffForHumans en 6 langues — sans ICU/ext-intl. Les déclinaisons sont produites par cloud-castle/inflector.
À quoi ça sert et comment l’utiliser
Un remplacement de Carbon là où seules une arithmétique calendaire correcte et une sortie localisée sont nécessaires : CalendarDate::parse()/now(), puis addMonthsNoOverflow(), startOfQuarter(), diffForHumans(null, 'ru').
Exemple
$date = CalendarDate::parse('2026-01-31', 'UTC');
$date->addMonthsNoOverflow(1)->format('Y-m-d'); // 2026-02-28, not “3 March”
$date->isWeekend(); // is it a weekend day
$date->diffInDays($other); // integer difference
$date->next(5)->format('Y-m-d'); // the nearest Friday
$date->subDays(5)->diffForHumans($date, 'en'); // “5 days ago”
Anti-modèles
Ne le choisissez pas uniquement pour une intégration étroite avec Laravel (façades, casts de dates Eloquent) — c’est le seul domaine où Carbon est plus riche ; l’API calendaire elle-même est à parité avec Carbon.
Cycle de vie
flowchart LR
A[parse / now / fromClock] --> B[CalendarDate]
B -->|addMonthsNoOverflow / startOfQuarter| B
B -->|isWeekend / diffInDays / next| B
B -->|isoFormat / diffForHumans| C[CloudCastle inflector]
C --> D[Localised string]
Comparaison de la fonctionnalité avec les concurrents
| Aspect | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Arithmétique des mois sans dépassement | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Bornes de périodes (startOf/endOf) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Prédicats de jour de semaine et relatifs (isWeekend/isToday) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Différences entières (diffInDays…diffInYears) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Navigation (next/previous/firstOfMonth) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| diffForHumans en 6 langues | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Localisation sans ICU/ext-intl | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Date issue d’une horloge injectée (déterminisme) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 8 | 0 | 6 | 0 | 0 | 0 |
← Retour à la liste des fonctionnalités
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano