TapHome

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

1
2
NOW()
NOW(kind)
NázevTypPopis
kindDateTimeKind, 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 23

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

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ázevTypPopis
year, month, daynumberPovinné společně. Vynechané části času jsou 0.
hour … millisecondnumber, nepovinnýDenní čas.
kindDateTimeKind, nepovinnýLocal (výchozí) nebo Utc.
textstringDatum a čas jako text.
formatstring, nepovinnýFormát .NET pro text, například "dd.MM.yyyy HH:mm".
millisecondsnumberMilisekundy 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ž je kind nastaven na Utc, 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: 30

DATETIMEADD

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.

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

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

TIMESPAN

TIMESPAN vytvoří hodnotu timespan — dobu trvání — buď z milisekund, nebo ze dnů, hodin, minut, sekund a milisekund.

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

Vlastnosti (jen pro čtení)

VlastnostVýznam
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDSJedna složka doby trvání (HOURS je 0 – 23).
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDSCelá 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 ± timespan dá timespan, datetime ± timespan dá datetime.
  • Odečítání dvou hodnot datetime není definováno. Pro čas mezi dvěma daty odečtěte jejich TICKS (milisekundy).
  • Deklarace proměnné s klíčovým slovem typu timespan vyžaduje Core 2023.2 nebo novější.

Pří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átí aktuální posun časového pásma řídicí jednotky od UTC v milisekundách, včetně letního času.

1
LOCALTIMEZONE()

Příklad

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

Vlastnosti hodnot datetime

Hodnota datetime má tyto vlastnosti. Čtěte je z proměnné, ne z volání funkce.

VlastnostČteníZápisPozná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é Saturday je neznámá proměnná.
  • <, > a = porovnávají dvě hodnoty datetime jako okamžiky v čase, takže hodnoty s různým KIND se porovnají správně.
  • Zápis hodnoty mimo rozsah zastaví skript, například Value must between 0-23.
  • Bez formátu vypíše TOSTRING hodnotu datetime jako yyyy/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.