TapHome

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

1
2
NOW()
NOW(kind)
NumeTipDescriere
kindDateTimeKind, opționalLocal (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 23

Consultaț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.

1
2
3
4
5
DATETIME(year, month, day [, hour [, minute [, second [, millisecond [, kind]]]]])
DATETIME(text [, format])
DATETIME(text, kind)
DATETIME(milliseconds [, kind])
DATETIME()
NumeTipDescriere
year, month, daynumărObligatorii împreună. Părțile de timp omise sunt 0.
hour … millisecondnumăr, opționalOra din zi.
kindDateTimeKind, opționalLocal (implicit) sau Utc.
textstringData și ora ca text.
formatstring, opționalFormatul .NET al lui text, de exemplu "dd.MM.yyyy HH:mm".
millisecondsnumărMilisecunde 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. Cu kind setat la Utc, 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: 30

DATETIMEADD

DATETIMEADD returnează un datetime nou, deplasat cu numărul dat de ani, luni, zile, ore, minute, secunde și milisecunde; numerele negative îl deplasează înapoi.

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

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

TIMESPAN

TIMESPAN creează o valoare timespan — o durată — fie din milisecunde, fie din zile, ore, minute, secunde și milisecunde.

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

Proprietăți (numai citire)

ProprietateSemnificație
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDSO 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 ± timespan dă un timespan, datetime ± timespan un datetime.
  • Scăderea a două valori datetime nu este definită. Pentru timpul dintre două date se scad valorile lor TICKS (milisecunde).
  • Declararea unei variabile cu cuvântul cheie de tip timespan necesită Core 2023.2 sau mai nou.

Exemplu

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)

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

1
LOCALTIMEZONE()

Exemplu

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

Proprietățile valorilor datetime

O valoare datetime are aceste proprietăți. Se citesc dintr-o variabilă, nu dintr-un apel de funcție.

ProprietateCitireScriereObservaț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. Un Saturday simplu este o variabilă necunoscută.
  • <, > și = compară două valori datetime ca momente în timp, așa că valorile cu KIND diferit 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 datetime ca yyyy/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.