🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
CalendarDate — trabajo con calendario al nivel de Carbon
Propósito
Una fecha de calendario sobre DateTimeImmutable: aritmética de meses/años con control de desbordamiento (addMonthsNoOverflow), límites de períodos, isoFormat y diffForHumans en 6 idiomas — sin ICU/ext-intl. Las declinaciones las construye cloud-castle/inflector.
Para qué y cómo usarlo
Un reemplazo de Carbon donde solo necesitas una aritmética de calendario correcta y una salida localizada: CalendarDate::parse()/now(), luego addMonthsNoOverflow(), startOfQuarter(), diffForHumans(null, 'ru').
Ejemplo
$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”
Antipatrones
No lo elijas únicamente por una integración estrecha con Laravel (fachadas, casts de fechas de Eloquent) — es lo único en lo que Carbon es más rico aquí; la propia API de calendario está a la par de Carbon.
Ciclo de vida
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]
Comparación de la característica con alternativas
| Aspecto | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Aritmética de meses sin desbordamiento | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Límites de períodos (startOf/endOf) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Predicados de día de la semana y relativos (isWeekend/isToday) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Diferencias enteras (diffInDays…diffInYears) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Navegación (next/previous/firstOfMonth) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| diffForHumans en 6 idiomas | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Localización sin ICU/ext-intl | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Fecha a partir de un reloj inyectado (determinismo) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 8 | 0 | 6 | 0 | 0 | 0 |
← Volver a la lista de características
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano