Data și ora
Funcțiile de dată și oră ale scripturilor TapHome — NOW, DATETIME, DATETIMEADD, TIMESPAN și LOCALTIMEZONE — și proprietățile valorilor datetime și timespan.
Funcțiile de dată și oră creează valori datetime (un moment în timp) și valori timespan (o durată). Funcționează în fiecare script — smart rules, notificări, Modbus și Packet parser — și folosesc fusul orar al unității de control. Toate funcțiile de pe această pagină necesită Core 2022.2 sau mai nou.
NOW
NOW returnează data și ora curente ale unității de control ca valoare datetime — implicit ora locală, UTC cu NOW(Utc).
| |
| Nume | Tip | Descriere |
|---|---|---|
kind | DateTimeKind, opțional | Local (implicit) sau Utc. NOW(DateTimeKind.Utc) este același lucru cu NOW(Utc). |
Observații — O proprietate nu se poate citi direct dintr-un apel de funcție: NOW().HOUR este respins la salvarea scriptului. Valoarea se stochează mai întâi într-o variabilă.
Exemplu
VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23Consultați și — DATETIME, Proprietățile valorilor datetime.
DATETIME
DATETIME creează o valoare datetime din părțile ei, dintr-un text sau dintr-un număr de milisecunde; apelată fără argumente, returnează 1.1.0001 00:00, nu ora curentă — pentru aceasta se folosește NOW.
| |
| Nume | Tip | Descriere |
|---|---|---|
year, month, day | număr | Obligatorii împreună. Părțile de timp omise sunt 0. |
hour … millisecond | număr, opțional | Ora din zi. |
kind | DateTimeKind, opțional | Local (implicit) sau Utc. |
text | string | Data și ora ca text. |
format | string, opțional | Formatul .NET al lui text, de exemplu "dd.MM.yyyy HH:mm". |
milliseconds | număr | Milisecunde de la 1.1.0001 — scara proprietății TICKS, nu timpul Unix. |
Observații
- Un text fără format se citește conform setărilor de limbă ale unității de control. Se folosește ISO 8601 (
"2026-01-15T08:30:00") sau se transmite un format, astfel încât rezultatul să nu depindă de ele. - Un text cu decalaj sau cu
Z("2026-01-15T08:30:00Z") se păstrează ca valoare UTC. Cukindsetat laUtc, un text fără informații despre fus se citește ca UTC. - Pentru timpul Unix se setează proprietatea UNIXTIME.
Exemplu
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 returnează un datetime nou, deplasat cu numărul dat de ani, luni, zile, ore, minute, secunde și milisecunde; numerele negative îl deplasează înapoi.
| |
Observații — Valoarea originală nu se modifică. Adăugarea unei luni la 31 ianuarie dă ultima zi a lunii februarie. Pentru a adăuga un interval se poate folosi și + cu un timespan sau cu un număr de milisecunde.
Exemplu
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 creează o valoare timespan — o durată — fie din milisecunde, fie din zile, ore, minute, secunde și milisecunde.
| |
Proprietăți (numai citire)
| Proprietate | Semnificație |
|---|---|
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS | O componentă a duratei (HOURS este 0 – 23). |
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDS | Întreaga durată în acea unitate, cu parte fracționară. |
Observații
- Există doar formele cu 1 și cu 5 argumente; între 2 și 4 argumente opresc scriptul.
timespan ± timespandă untimespan,datetime ± timespanundatetime.- Scăderea a două valori
datetimenu este definită. Pentru timpul dintre două date se scad valorile lorTICKS(milisecunde). - Declararea unei variabile cu cuvântul cheie de tip
timespannecesită Core 2023.2 sau mai nou.
Exemplu
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)Erori — TIMESPAN Unsupported number of parameters; Operator ‘-’ not defined for ‘DateTime’ and ‘DateTime’.
LOCALTIMEZONE
LOCALTIMEZONE returnează decalajul curent al fusului orar al unității de control față de UTC, în milisecunde, inclusiv ora de vară.
| |
Exemplu
LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer timeProprietățile valorilor datetime
O valoare datetime are aceste proprietăți. Se citesc dintr-o variabilă, nu dintr-un apel de funcție.
| Proprietate | Citire | Scriere | Observație |
|---|---|---|---|
TICKS | ✓ | ✓ | Milisecunde de la 1.1.0001. |
YEAR, MONTH, DAY | ✓ | ✓ | Scrierea verifică intervalul (MONTH 1 – 12, DAY 1 – ultima zi a lunii). |
HOUR, MINUTE, SECOND, MILLISECOND | ✓ | ✓ | Intervale 0 – 23, 0 – 59, 0 – 59, 0 – 999. |
DAYOFWEEK | ✓ | Valoare DayOfWeek (Monday … Sunday). | |
DAYOFYEAR | ✓ | 1 – 366. | |
KIND | ✓ | ✓ | DateTimeKind: Local, Utc sau Unspecified. |
UTCDATETIME, LOCALDATETIME | ✓ | Același moment convertit cu fusul orar al unității de control. | |
UNIXTIME | ✓ | ✓ | Secunde de la 1.1.1970 UTC. Scrierea ei stochează o valoare UTC. |
Observații
- În afara unui argument de funcție, o valoare de enumerare se scrie cu tipul ei:
DayOfWeek.Saturday. UnSaturdaysimplu este o variabilă necunoscută. <,>și=compară două valoridatetimeca momente în timp, așa că valorile cuKINDdiferit se compară corect.- Scrierea unei valori în afara intervalului oprește scriptul, de exemplu Value must between 0-23.
- Fără format, TOSTRING afișează un
datetimecayyyy/MM/dd hh:mm:ss.fff— ceas de 12 ore fără AM sau PM. Se transmite un format precum"yyyy-MM-dd HH:mm".
Exemplu — nicio acțiune în weekend
VAR now := NOW();
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
RETURN(0);
END
1;Exemplu — dată dintr-un marcaj de timp Unix
datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)Consultați și — Șiruri de format, Tipuri de date.