---
title: "Data i czas"
description: "Data i czas w skryptach TapHome: bieżący czas funkcją NOW, tworzenie dat funkcją DATETIME, dodawanie dni lub godzin, czas trwania funkcją TIMESPAN, przesunięcie strefy czasowej i czas uniksowy."
url: "https://taphome.com/pl/docs/script/date-and-time/"
language: pl
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["date-time","timespan","timezone","scripting-language"]
  questions: ["Jak pracować z datą i czasem w skryptach TapHome?","Jak utworzyć obiekt DateTime w TapHome?","Jak uzyskać bieżącą datę i czas w skrypcie TapHome?","Jak przedstawić czas trwania funkcją TIMESPAN?","Jak dodać lub odjąć czas od DateTime funkcją DATETIMEADD?","Jak uzyskać przesunięcie lokalnej strefy czasowej w TapHome?","Jakie właściwości ma obiekt DateTime?","Jak sprawdzić w skrypcie, czy dziś jest weekend?","Jak przekonwertować znacznik czasu Unix na datę w skrypcie TapHome?","Jak obliczyć liczbę minut między dwiema datami?"]
---

# Data i czas

Funkcje daty i czasu w skryptach TapHome — NOW, DATETIME, DATETIMEADD, TIMESPAN i LOCALTIMEZONE — oraz właściwości wartości datetime i timespan.

Ostatnia aktualizacja: 2026-11-06

Funkcje daty i czasu tworzą wartości `datetime` (punkt w czasie) i `timespan` (czas trwania). Działają w każdym skrypcie — w smart rules, powiadomieniach, Modbus i Packet parser — i używają strefy czasowej jednostki sterującej. Wymagana wersja dla wszystkich funkcji na tej stronie: Core 2022.2 lub nowszy.

## NOW

`NOW` zwraca bieżącą datę i czas jednostki sterującej jako wartość `datetime` — domyślnie czas lokalny, z `NOW(Utc)` czas UTC.

```text
NOW()
NOW(kind)
```

| Nazwa | Typ | Opis |
|---|---|---|
| `kind` | `DateTimeKind`, opcjonalny | `Local` (domyślnie) lub `Utc`. `NOW(DateTimeKind.Utc)` to to samo co `NOW(Utc)`. |

**Uwagi** — Właściwości nie można odczytać bezpośrednio z wywołania funkcji: `NOW().HOUR` jest odrzucane przy zapisywaniu skryptu. Najpierw zapisz wartość do zmiennej.

**Przykład**

```taphome
VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23
```

**Zobacz też** — [DATETIME](https://taphome.com/pl/docs/script/date-and-time/#datetime), [Właściwości wartości datetime](https://taphome.com/pl/docs/script/date-and-time/#datetime-properties).

## DATETIME

`DATETIME` tworzy wartość `datetime` z jej części, z tekstu albo z liczby milisekund; wywołana bez argumentów zwraca 1.1.0001 00:00, a nie bieżący czas — do tego użyj [NOW](https://taphome.com/pl/docs/script/date-and-time/#now).

```text
DATETIME(year, month, day [, hour [, minute [, second [, millisecond [, kind]]]]])
DATETIME(text [, format])
DATETIME(text, kind)
DATETIME(milliseconds [, kind])
DATETIME()
```

| Nazwa | Typ | Opis |
|---|---|---|
| `year`, `month`, `day` | liczba | Wymagane razem. Pominięte części czasu wynoszą 0. |
| `hour` … `millisecond` | liczba, opcjonalna | Pora dnia. |
| `kind` | `DateTimeKind`, opcjonalny | `Local` (domyślnie) lub `Utc`. |
| `text` | string | Data i czas jako tekst. |
| `format` | string, opcjonalny | Format .NET dla `text`, na przykład `"dd.MM.yyyy HH:mm"`. |
| `milliseconds` | liczba | Milisekundy od 1.1.0001 — skala właściwości `TICKS`, a nie czas uniksowy. |

**Uwagi**

- Tekst bez formatu jest odczytywany według ustawień językowych jednostki sterującej. Użyj ISO 8601 (`"2026-01-15T08:30:00"`) albo podaj format, aby wynik od nich nie zależał.
- Tekst z przesunięciem lub `Z` (`"2026-01-15T08:30:00Z"`) jest zachowywany jako wartość UTC. Gdy `kind` ma wartość `Utc`, tekst bez informacji o strefie jest odczytywany jako UTC.
- Dla czasu uniksowego ustaw [właściwość UNIXTIME](https://taphome.com/pl/docs/script/date-and-time/#datetime-properties).

**Przykład**

```taphome
# data z części: rok, miesiąc, dzień, czas
VAR start := DATETIME(2026, 1, 15, 8, 30, 0);
# data z tekstu ISO 8601 i z tekstu z formatem
VAR iso := DATETIME("2026-01-15T08:30:00");
VAR custom := DATETIME("15.01.2026 08:30", "dd.MM.yyyy HH:mm");
# data z części, oznaczona jako UTC
VAR utc := DATETIME(2026, 1, 15, 8, 30, 0, 0, DateTimeKind.Utc);
# minuta przetworzonej daty
custom.MINUTE;
# Result: 30
```

## DATETIMEADD

`DATETIMEADD` zwraca nową wartość `datetime` przesuniętą o podaną liczbę lat, miesięcy, dni, godzin, minut, sekund i milisekund; liczby ujemne przesuwają ją wstecz.

```text
DATETIMEADD(datetime, years [, months [, days [, hours [, minutes [, seconds [, milliseconds]]]]]])
```

**Uwagi** — Pierwotna wartość się nie zmienia. Dodanie miesiąca do 31 stycznia daje ostatni dzień lutego. Aby dodać przedział, możesz też użyć `+` z [timespan](https://taphome.com/pl/docs/script/date-and-time/#timespan) albo z liczbą milisekund.

**Przykład**

```taphome
# bieżący czas jednostki sterującej
VAR now := NOW();
# o dzień do przodu, o dwie godziny wstecz
VAR tomorrow := DATETIMEADD(now, 0, 0, 1);
VAR twoHoursAgo := DATETIMEADD(now, 0, 0, 0, -2);
# miesiąc po 31 stycznia
VAR endOfFebruary := DATETIMEADD(DATETIME(2026, 1, 31), 0, 1);
# dzień wyniku
endOfFebruary.DAY;
# Result: 28
```

## TIMESPAN

`TIMESPAN` tworzy wartość `timespan` — czas trwania — z milisekund albo z dni, godzin, minut, sekund i milisekund.

```text
TIMESPAN(milliseconds)
TIMESPAN(days, hours, minutes, seconds, milliseconds)
```

**Właściwości** (tylko do odczytu)

| Właściwość | Znaczenie |
|---|---|
| `DAYS`, `HOURS`, `MINUTES`, `SECONDS`, `MILLISECONDS` | Jedna składowa czasu trwania (`HOURS` wynosi 0 – 23). |
| `TOTALDAYS`, `TOTALHOURS`, `TOTALMINUTES`, `TOTALSECONDS`, `TOTALMILLISECONDS` | Cały czas trwania w tej jednostce, z częścią ułamkową. |

**Uwagi**

- Istnieją tylko formy z 1 i 5 argumentami; 2 do 4 argumentów zatrzymuje skrypt.
- `timespan ± timespan` daje `timespan`, `datetime ± timespan` daje `datetime`.
- Odejmowanie dwóch wartości `datetime` nie jest zdefiniowane. Aby uzyskać czas między dwiema datami, odejmij ich `TICKS` (milisekundy).
- Deklaracja zmiennej słowem kluczowym typu `timespan` — wymagana wersja: Core 2023.2 lub nowszy.

**Przykład**

```taphome
VAR t := TIMESPAN(1, 2, 3, 4, 0);
t.TOTALSECONDS;
# Result: 93784
```

```taphome
VAR start := DATETIME(2026, 1, 15, 8, 0, 0);
VAR stop := DATETIME(2026, 1, 15, 9, 30, 0);
(stop.TICKS - start.TICKS) / 60000;
# Result: 90 (minutes)
```

**Błędy** — *TIMESPAN Unsupported number of parameters*; *Operator '-' not defined for 'DateTime' and 'DateTime'*.

## LOCALTIMEZONE

`LOCALTIMEZONE` zwraca bieżące przesunięcie strefy czasowej jednostki sterującej względem UTC w milisekundach, z uwzględnieniem czasu letniego.

```text
LOCALTIMEZONE()
```

**Przykład**

```taphome
LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer time
```

## Właściwości wartości datetime

Wartość `datetime` ma te właściwości. Odczytuj je ze zmiennej, a nie z wywołania funkcji.

| Właściwość | Odczyt | Zapis | Uwaga |
|---|---|---|---|
| `TICKS` | ✓ | ✓ | Milisekundy od 1.1.0001. |
| `YEAR`, `MONTH`, `DAY` | ✓ | ✓ | Zapis sprawdza zakres (`MONTH` 1 – 12, `DAY` 1 – ostatni dzień miesiąca). |
| `HOUR`, `MINUTE`, `SECOND`, `MILLISECOND` | ✓ | ✓ | Zakresy 0 – 23, 0 – 59, 0 – 59, 0 – 999. |
| `DAYOFWEEK` | ✓ | | Wartość `DayOfWeek` (`Monday` … `Sunday`). |
| `DAYOFYEAR` | ✓ | | 1 – 366. |
| `KIND` | ✓ | ✓ | `DateTimeKind`: `Local`, `Utc` lub `Unspecified`. |
| `UTCDATETIME`, `LOCALDATETIME` | ✓ | | Ta sama chwila przeliczona ze strefą czasową jednostki sterującej. |
| `UNIXTIME` | ✓ | ✓ | Sekundy od 1.1.1970 UTC. Zapis przechowuje wartość UTC. |

**Uwagi**

- Poza argumentem funkcji wartość wyliczeniową zapisuje się z jej typem: `DayOfWeek.Saturday`. Samo `Saturday` to nieznana zmienna.
- `<`, `>` i `=` porównują dwie wartości `datetime` jako chwile w czasie, więc wartości o różnym `KIND` porównują się poprawnie.
- Zapis wartości spoza zakresu zatrzymuje skrypt, na przykład *Value must between 0-23*.
- Bez formatu [TOSTRING](https://taphome.com/pl/docs/script/data-type-conversions/#tostring) wypisuje `datetime` jako `yyyy/MM/dd hh:mm:ss.fff` — w zegarze 12-godzinnym bez AM i PM. Podaj format, na przykład `"yyyy-MM-dd HH:mm"`.

**Przykład — brak akcji w weekend**

```taphome
# bieżący czas jednostki sterującej
VAR now := NOW();
# w sobotę i niedzielę zwróć 0
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
    RETURN(0);
END
# w pozostałe dni zwróć 1
1;
```

**Przykład — data ze znacznika czasu Unix**

```taphome
datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)
```

**Zobacz też** — [Ciągi formatu](https://taphome.com/pl/docs/script/data-type-conversions/#format-strings), [Typy danych](https://taphome.com/pl/docs/script/data-types/).
