TapHome

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.

1
2
NOW()
NOW(kind)
NazwaTypOpis
kindDateTimeKind, opcjonalnyLocal (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 23

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

1
2
3
4
5
DATETIME(year, month, day [, hour [, minute [, second [, millisecond [, kind]]]]])
DATETIME(text [, format])
DATETIME(text, kind)
DATETIME(milliseconds [, kind])
DATETIME()
NazwaTypOpis
year, month, dayliczbaWymagane razem. Pominięte części czasu wynoszą 0.
hour … millisecondliczba, opcjonalnaPora dnia.
kindDateTimeKind, opcjonalnyLocal (domyślnie) lub Utc.
textstringData i czas jako tekst.
formatstring, opcjonalnyFormat .NET dla text, na przykład "dd.MM.yyyy HH:mm".
millisecondsliczbaMilisekundy 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.

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

1
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 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: 28

TIMESPAN

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

1
2
TIMESPAN(milliseconds)
TIMESPAN(days, hours, minutes, seconds, milliseconds)

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

WłaściwośćZnaczenie
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDSJedna składowa czasu trwania (HOURS wynosi 0 – 23).
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDSCał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 wymaga Core 2023.2 lub nowszego.

Przykład

VAR t := TIMESPAN(1, 2, 3, 4, 0);
t.TOTALSECONDS;
# Result: 93784
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.

1
LOCALTIMEZONE()

Przykład

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śćOdczytZapisUwaga
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 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

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.