---
title: "Trvanie a časové pásma — Appointments for Laravel | Roundly"
description: "Ako sa začiatok, koniec a trvanie odvodzujú navzájom, prečo sa časy ukladajú v UTC a ako čítať lokálny čas."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/trvanie-a-casove-pasma
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Appointments for Laravel](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)

# 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:

```php
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:

```php
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:

```php
$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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)
