TapHome

Dátum a čas

Funkcie skriptu TapHome pre dátum a čas — NOW, DATETIME, DATETIMEADD, TIMESPAN a LOCALTIMEZONE — a vlastnosti hodnôt datetime a timespan.

Funkcie pre dátum a čas vytvárajú hodnoty datetime (okamih v čase) a timespan (trvanie). Fungujú v každom skripte — v smart rules, notifikáciách, Modbus aj Packet parser skriptoch — a používajú časové pásmo riadiacej jednotky. Všetky funkcie na tejto stránke potrebujú Core 2022.2 alebo novší.

NOW

NOW vráti aktuálny dátum a čas riadiacej jednotky ako hodnotu datetime — predvolene v miestnom čase, s NOW(Utc) v UTC.

1
2
NOW()
NOW(kind)
NázovTypPopis
kindDateTimeKind, voliteľnýLocal (predvolené) alebo Utc. NOW(DateTimeKind.Utc) je to isté ako NOW(Utc).

Poznámky — Vlastnosť sa nedá čítať priamo z volania funkcie: NOW().HOUR sa pri uložení skriptu odmietne. Hodnotu najprv uložte do premennej.

Príklad

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

Pozrite aj — DATETIME, Vlastnosti hodnôt datetime.

DATETIME

DATETIME vytvorí hodnotu datetime z jednotlivých častí, z textu alebo z počtu milisekúnd; bez argumentov vráti 1.1.0001 00:00, nie aktuálny čas — na ten slúži 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()
NázovTypPopis
year, month, dayčísloZadávajú sa iba spolu. Vynechané časti času sú 0.
hour … millisecondčíslo, voliteľnýČas dňa.
kindDateTimeKind, voliteľnýLocal (predvolené) alebo Utc.
textreťazecDátum a čas ako text.
formatreťazec, voliteľný.NET formát textu text, napríklad "dd.MM.yyyy HH:mm".
millisecondsčísloMilisekundy od 1.1.0001 — škála vlastnosti TICKS, nie Unix čas.

Poznámky

  • Text bez formátu sa číta podľa jazykových nastavení riadiacej jednotky. Aby výsledok od nich nezávisel, použite ISO 8601 ("2026-01-15T08:30:00") alebo zadajte formát.
  • Text s posunom alebo so Z ("2026-01-15T08:30:00Z") sa uloží ako hodnota v UTC. Keď je kind nastavený na Utc, text bez údaja o časovom pásme sa číta ako UTC.
  • Pre Unix čas nastavte vlastnosť UNIXTIME.

Príklad

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 vráti novú hodnotu datetime posunutú o zadaný počet rokov, mesiacov, dní, hodín, minút, sekúnd a milisekúnd; záporné čísla ju posunú späť.

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

Poznámky — Pôvodná hodnota sa nezmení. Pripočítanie mesiaca k 31. januáru dá posledný deň februára. Interval sa dá pripočítať aj operátorom + s hodnotou timespan alebo s počtom milisekúnd.

Príklad

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 vytvorí hodnotu timespan — trvanie — buď z milisekúnd, alebo z dní, hodín, minút, sekúnd a milisekúnd.

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

Vlastnosti (iba na čítanie)

VlastnosťVýznam
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDSJedna zložka trvania (HOURS je 0 – 23).
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDSCelé trvanie v danej jednotke, aj s desatinnou časťou.

Poznámky

  • Existujú iba formy s 1 a s 5 argumentmi; 2 až 4 argumenty zastavia skript.
  • timespan ± timespan dá timespan, datetime ± timespan dá datetime.
  • Odčítanie dvoch hodnôt datetime nie je definované. Čas medzi dvoma dátumami získate odčítaním ich TICKS (milisekúnd).
  • Deklarácia premennej kľúčovým slovom typu timespan potrebuje Core 2023.2 alebo novší.

Príklad

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)

Chyby — TIMESPAN Unsupported number of parameters; Operator ‘-’ not defined for ‘DateTime’ and ‘DateTime’.

LOCALTIMEZONE

LOCALTIMEZONE vráti aktuálny posun časového pásma riadiacej jednotky od UTC v milisekundách, vrátane letného času.

1
LOCALTIMEZONE()

Príklad

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

Vlastnosti hodnôt datetime

Hodnota datetime má tieto vlastnosti. Čítajte ich z premennej, nie z volania funkcie.

VlastnosťČítanieZápisPoznámka
TICKS✓✓Milisekundy od 1.1.0001.
YEAR, MONTH, DAY✓✓Zápis kontroluje rozsah (MONTH 1 – 12, DAY 1 – posledný deň mesiaca).
HOUR, MINUTE, SECOND, MILLISECOND✓✓Rozsahy 0 – 23, 0 – 59, 0 – 59, 0 – 999.
DAYOFWEEK✓Hodnota DayOfWeek (Monday … Sunday).
DAYOFYEAR✓1 – 366.
KIND✓✓DateTimeKind: Local, Utc alebo Unspecified.
UTCDATETIME, LOCALDATETIME✓Ten istý okamih prepočítaný podľa časového pásma riadiacej jednotky.
UNIXTIME✓✓Sekundy od 1.1.1970 UTC. Zápis uloží hodnotu v UTC.

Poznámky

  • Mimo argumentu funkcie sa hodnota enumu píše aj so svojím typom: DayOfWeek.Saturday. Samotné Saturday je neznáma premenná.
  • <, > a = porovnávajú dve hodnoty datetime ako okamihy v čase, takže hodnoty s rôznym KIND sa porovnajú správne.
  • Zápis hodnoty mimo rozsahu zastaví skript, napríklad chybou Value must between 0-23.
  • Bez formátu vypíše TOSTRING hodnotu datetime ako yyyy/MM/dd hh:mm:ss.fff — v 12-hodinovom čase bez AM a PM. Zadajte formát, napríklad "yyyy-MM-dd HH:mm".

Príklad — žiadna akcia cez víkend

VAR now := NOW();
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
    RETURN(0);
END
1;

Príklad — dátum z Unix časovej pečiatky

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

Pozrite aj — Formátovacie reťazce, Dátové typy.