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.
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. Wszystkie funkcje na tej stronie wymagają Core 2022.2 lub nowszego.
NOW
NOW zwraca bieżącą datę i czas jednostki sterującej jako wartość datetime — domyślnie czas lokalny, z NOW(Utc) czas UTC.
| |
| 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
VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23Zobacz też — DATETIME, Właściwości wartości datetime.
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.
| |
| 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. Gdykindma wartośćUtc, tekst bez informacji o strefie jest odczytywany jako UTC. - Dla czasu uniksowego ustaw właściwość UNIXTIME.
Przykład
VAR start := DATETIME(2026, 1, 15, 8, 30, 0);
VAR iso := DATETIME("2026-01-15T08:30:00");
VAR custom := DATETIME("15.01.2026 08:30", "dd.MM.yyyy HH:mm");
VAR utc := DATETIME(2026, 1, 15, 8, 30, 0, 0, DateTimeKind.Utc);
custom.MINUTE;
# Result: 30DATETIMEADD
DATETIMEADD zwraca nową wartość datetime przesuniętą o podaną liczbę lat, miesięcy, dni, godzin, minut, sekund i milisekund; liczby ujemne przesuwają ją wstecz.
| |
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 albo z liczbą milisekund.
Przykład
VAR now := NOW();
VAR tomorrow := DATETIMEADD(now, 0, 0, 1);
VAR twoHoursAgo := DATETIMEADD(now, 0, 0, 0, -2);
VAR endOfFebruary := DATETIMEADD(DATETIME(2026, 1, 31), 0, 1);
endOfFebruary.DAY;
# Result: 28TIMESPAN
TIMESPAN tworzy wartość timespan — czas trwania — z milisekund albo z dni, godzin, minut, sekund i milisekund.
| |
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 ± timespandajetimespan,datetime ± timespandajedatetime.- Odejmowanie dwóch wartości
datetimenie jest zdefiniowane. Aby uzyskać czas między dwiema datami, odejmij ichTICKS(milisekundy). - Deklaracja zmiennej słowem kluczowym typu
timespanwymaga Core 2023.2 lub nowszego.
Przykład
VAR t := TIMESPAN(1, 2, 3, 4, 0);
t.TOTALSECONDS;
# Result: 93784VAR 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.
| |
Przykład
LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer timeWł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. SamoSaturdayto nieznana zmienna. <,>i=porównują dwie wartościdatetimejako chwile w czasie, więc wartości o różnymKINDporównują się poprawnie.- Zapis wartości spoza zakresu zatrzymuje skrypt, na przykład Value must between 0-23.
- Bez formatu TOSTRING wypisuje
datetimejakoyyyy/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
VAR now := NOW();
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
RETURN(0);
END
1;Przykład — data ze znacznika czasu Unix
datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)Zobacz też — Ciągi formatu, Typy danych.