CloudCastle Clock

🇷🇺 Русский · 🇬🇧 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🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
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🏆 806000

← Volver a la lista de características


🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano