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 = 60Hook 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 kryptomienOdoslaní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.