Datum a čas
Funkce skriptu TapHome pro datum a čas — NOW, DATETIME, DATETIMEADD, TIMESPAN a LOCALTIMEZONE — a vlastnosti hodnot datetime a timespan.
Funkce pro datum a čas vytvářejí hodnoty datetime (okamžik v čase) a timespan (doba trvání). Fungují v každém skriptu — ve smart rules, oznámeních, Modbus i Packet parser — a používají časové pásmo řídicí jednotky. Všechny funkce na této stránce vyžadují Core 2022.2 nebo novější.
NOW
NOW vrátí aktuální datum a čas řídicí jednotky jako hodnotu datetime — výchozí je místní čas, UTC pomocí NOW(Utc).
| |
| Název | Typ | Popis |
|---|---|---|
kind | DateTimeKind, nepovinný | Local (výchozí) nebo Utc. NOW(DateTimeKind.Utc) je totéž jako NOW(Utc). |
Poznámky — Vlastnost nelze číst přímo z volání funkce: NOW().HOUR je odmítnuto při uložení skriptu. Hodnotu nejprve uložte do proměnné.
Příklad
VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23Viz také — DATETIME, Vlastnosti hodnot datetime.
DATETIME
DATETIME vytvoří hodnotu datetime z jejích částí, z textu nebo z počtu milisekund; bez argumentů vrátí 1.1.0001 00:00, ne aktuální čas — k tomu slouží NOW.
| |
| Název | Typ | Popis |
|---|---|---|
year, month, day | number | Povinné společně. Vynechané části času jsou 0. |
hour … millisecond | number, nepovinný | Denní čas. |
kind | DateTimeKind, nepovinný | Local (výchozí) nebo Utc. |
text | string | Datum a čas jako text. |
format | string, nepovinný | Formát .NET pro text, například "dd.MM.yyyy HH:mm". |
milliseconds | number | Milisekundy od 1.1.0001 — měřítko vlastnosti TICKS, ne Unixový čas. |
Poznámky
- Text bez formátu se čte podle jazykového nastavení řídicí jednotky. Použijte ISO 8601 (
"2026-01-15T08:30:00") nebo zadejte formát, aby výsledek na nastavení nezávisel. - Text s posunem nebo
Z("2026-01-15T08:30:00Z") se uchová jako hodnota UTC. Když jekindnastaven naUtc, text bez informace o pásmu se čte jako UTC. - Pro Unixový čas nastavte vlastnost UNIXTIME.
Pří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: 30DATETIMEADD
DATETIMEADD vrátí novou hodnotu datetime posunutou o zadaný počet let, měsíců, dnů, hodin, minut, sekund a milisekund; záporná čísla ji posunou zpět.
| |
Poznámky — Původní hodnota se nemění. Přičtení měsíce k 31. lednu dá poslední den února. Interval lze přičíst i pomocí + s hodnotou timespan nebo s počtem milisekund.
Pří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: 28TIMESPAN
TIMESPAN vytvoří hodnotu timespan — dobu trvání — buď z milisekund, nebo ze dnů, hodin, minut, sekund a milisekund.
| |
Vlastnosti (jen pro čtení)
| Vlastnost | Význam |
|---|---|
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS | Jedna složka doby trvání (HOURS je 0 – 23). |
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDS | Celá doba trvání v dané jednotce, včetně zlomku. |
Poznámky
- Existují jen formy s 1 a 5 argumenty; 2 až 4 argumenty skript zastaví.
timespan ± timespandátimespan,datetime ± timespandádatetime.- Odečítání dvou hodnot
datetimenení definováno. Pro čas mezi dvěma daty odečtěte jejichTICKS(milisekundy). - Deklarace proměnné s klíčovým slovem typu
timespanvyžaduje Core 2023.2 nebo novější.
Příklad
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)Chyby — TIMESPAN Unsupported number of parameters; Operator ‘-’ not defined for ‘DateTime’ and ‘DateTime’.
LOCALTIMEZONE
LOCALTIMEZONE vrátí aktuální posun časového pásma řídicí jednotky od UTC v milisekundách, včetně letního času.
| |
Příklad
LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer timeVlastnosti hodnot datetime
Hodnota datetime má tyto vlastnosti. Čtěte je z proměnné, ne z volání funkce.
| Vlastnost | Čtení | Zápis | Poznámka |
|---|---|---|---|
TICKS | ✓ | ✓ | Milisekundy od 1.1.0001. |
YEAR, MONTH, DAY | ✓ | ✓ | Zápis kontroluje rozsah (MONTH 1 – 12, DAY 1 – poslední den měsíce). |
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 nebo Unspecified. |
UTCDATETIME, LOCALDATETIME | ✓ | Stejný okamžik převedený podle časového pásma řídicí jednotky. | |
UNIXTIME | ✓ | ✓ | Sekundy od 1.1.1970 UTC. Zápis uloží hodnotu UTC. |
Poznámky
- Mimo argument funkce se hodnota výčtu píše s typem:
DayOfWeek.Saturday. SamotnéSaturdayje neznámá proměnná. <,>a=porovnávají dvě hodnotydatetimejako okamžiky v čase, takže hodnoty s různýmKINDse porovnají správně.- Zápis hodnoty mimo rozsah zastaví skript, například Value must between 0-23.
- Bez formátu vypíše TOSTRING hodnotu
datetimejakoyyyy/MM/dd hh:mm:ss.fff— ve 12hodinovém formátu bez AM a PM. Zadejte formát, například"yyyy-MM-dd HH:mm".
Příklad — žádná akce o víkendu
VAR now := NOW();
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
RETURN(0);
END
1;Příklad — datum z Unixového časového razítka
datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)Viz také — Formátovací řetězce, Datové typy.