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.
| |
| Názov | Typ | Popis |
|---|---|---|
kind | DateTimeKind, 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 23Pozrite 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.
| |
| Názov | Typ | Popis |
|---|---|---|
year, month, day | číslo | Zadávajú sa iba spolu. Vynechané časti času sú 0. |
hour … millisecond | číslo, voliteľný | Čas dňa. |
kind | DateTimeKind, voliteľný | Local (predvolené) alebo Utc. |
text | reťazec | Dátum a čas ako text. |
format | reťazec, voliteľný | .NET formát textu text, napríklad "dd.MM.yyyy HH:mm". |
milliseconds | číslo | Milisekundy 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ď jekindnastavený naUtc, 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: 30DATETIMEADD
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äť.
| |
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: 28TIMESPAN
TIMESPAN vytvorí hodnotu timespan — trvanie — buď z milisekúnd, alebo z dní, hodín, minút, sekúnd a milisekúnd.
| |
Vlastnosti (iba na čítanie)
| Vlastnosť | Význam |
|---|---|
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS | Jedna zložka trvania (HOURS je 0 – 23). |
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDS | Celé 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 ± timespandátimespan,datetime ± timespandádatetime.- Odčítanie dvoch hodnôt
datetimenie je definované. Čas medzi dvoma dátumami získate odčítaním ichTICKS(milisekúnd). - Deklarácia premennej kľúčovým slovom typu
timespanpotrebuje Core 2023.2 alebo novší.
Prí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áti aktuálny posun časového pásma riadiacej jednotky od UTC v milisekundách, vrátane letného času.
| |
Príklad
LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer timeVlastnosti hodnôt datetime
Hodnota datetime má tieto vlastnosti. Čítajte ich z premennej, nie z volania funkcie.
| Vlastnosť | Čítanie | Zápis | Pozná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éSaturdayje neznáma premenná. <,>a=porovnávajú dve hodnotydatetimeako okamihy v čase, takže hodnoty s rôznymKINDsa 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
datetimeakoyyyy/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.