NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Appointments for Laravel

Trvanie a časové pásma

Zadajte trvanie (lasting() alebo durationMinutes) alebo explicitný koniec (until()). Ak zadáte len jedno, druhé sa odvodí; ak ani jedno, použije sa default_duration_minutes:

use RoundlyConsulting\Appointments\Facades\Appointments;

Appointments::schedule('Workshop')
    ->startingAt('2026-07-01 09:00')
    ->until('2026-07-01 11:30')         // duration_minutes = 150
    ->create();

Appointments::schedule('Quick sync')
    ->startingAt('2026-07-01 09:00')
    ->create();                         // no duration, no end: default_duration_minutes (60)

Appointments::schedule('Review')
    ->until('2026-07-01 16:00')         // measured against the start, before or after startingAt()
    ->startingAt('2026-07-01 15:00')
    ->create();                         // duration_minutes = 60

Hook saving na modeli udržiava dvojicu konzistentnú aj pri priamom zápise riadkov: explicitné ends_at doplní duration_minutes, inak sa ends_at odvodí z duration_minutes alebo z predvolenej hodnoty.

Neplatné časy

Trvanie kratšie ako jedna minúta alebo koniec, ktorý nie je neskôr ako začiatok, vyhodí InvalidScheduleException ešte pred akýmkoľvek zápisom. Rovnaké pravidlo uplatňuje reschedule() na durationMinutes:

use RoundlyConsulting\Appointments\Exceptions\InvalidScheduleException;
use RoundlyConsulting\Appointments\Facades\Appointments;

try {
    Appointments::schedule('Back to front')
        ->startingAt('2026-07-01 11:00')
        ->until('2026-07-01 10:00')     // the end does not come after the start
        ->create();
} catch (InvalidScheduleException $e) {
    $e->getMessage();   // An appointment must end after it starts; …
}

Appointments::schedule('Instant')->lasting(0);   // throws: an appointment must last at least one minute

Časové pásma

starts_at a ends_at vždy obsahujú UTC, nech je app.timezone akékoľvek, a načítajú sa ako inštancie CarbonImmutable v UTC. Lokálne zobrazenie určuje stĺpec timezone termínu. Odovzdajte pásmo do startingAt() — čas sa v ňom prečíta a pásmo sa uloží k termínu:

$appointment = Appointments::schedule('Client call')
    ->startingAt('2026-07-01 17:30', timezone: 'Europe/Bratislava')
    ->lasting(45)
    ->create();

$appointment->timezone;             // 'Europe/Bratislava'
$appointment->starts_at;            // 2026-07-01 15:30 UTC — instants are stored in UTC
$appointment->startsAtLocal();      // CarbonImmutable 2026-07-01 17:30 Europe/Bratislava
$appointment->endsAtLocal();        // CarbonImmutable 2026-07-01 18:15 Europe/Bratislava
$appointment->resolveTimezone();    // appointment timezone, else appointments.timezone, else app.timezone
$appointment->duration();           // CarbonInterval of 45 minutes
$appointment->durationInMinutes();  // 45

// No zone given: the string is read in appointments.timezone, else app.timezone — and that zone is stored
$walkIn = Appointments::schedule('Walk-in')->startingAt('2026-07-01 09:00')->create();
$walkIn->timezone;                  // e.g. 'Europe/Bratislava' — a later config change does not re-time it
  • Odovzdaný Carbon si ponechá svoj okamih. Reťazec času bez posunu sa číta v pásme z parametra timezone:, inak v appointments.timezone, inak v app.timezone — a toto pásmo sa uloží k termínu.
  • Každý termín si ponecháva pásmo, v ktorom bol rezervovaný, takže neskoršia zmena appointments.timezone existujúce termíny nepreplánuje.
  • startsAtLocal() a endsAtLocal() prevedú uložené časy do pásma termínu; endsAtLocal() vráti null, ak termín nemá koniec.
  • resolveTimezone() vráti vlastné pásmo termínu; riadok uložený bez neho — z factory či ručného vloženia — sa vráti na appointments.timezone, potom na app.timezone.
  • duration() vráti CarbonInterval a durationInMinutes() int — z duration_minutes, inak zo začiatku a konca, inak predvolenú hodnotu.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.