Data e ora
Funzioni di data e ora degli script TapHome — NOW, DATETIME, DATETIMEADD, TIMESPAN e LOCALTIMEZONE — e le proprietà dei valori datetime e timespan.
Le funzioni di data e ora creano valori datetime (un istante) e valori timespan (una durata). Funzionano in ogni script — smart rule, notifiche, Modbus e Packet parser — e usano il fuso orario dell’unità di controllo. Tutte le funzioni di questa pagina richiedono il Core 2022.2 o più recente.
NOW
NOW restituisce la data e l’ora attuali dell’unità di controllo come valore datetime — l’ora locale per impostazione predefinita, UTC con NOW(Utc).
| |
| Nome | Tipo | Descrizione |
|---|---|---|
kind | DateTimeKind, facoltativo | Local (predefinito) o Utc. NOW(DateTimeKind.Utc) è uguale a NOW(Utc). |
Note — Una proprietà non si può leggere direttamente dalla chiamata di una funzione: NOW().HOUR viene rifiutato al salvataggio dello script. Salva prima il valore in una variabile.
Esempio
VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23Vedi anche — DATETIME, Proprietà dei valori datetime.
DATETIME
DATETIME crea un valore datetime dalle sue parti, da un testo o da un numero di millisecondi; chiamata senza argomenti restituisce 1.1.0001 00:00, non l’ora attuale — per quella usa NOW.
| |
| Nome | Tipo | Descrizione |
|---|---|---|
year, month, day | numero | Obbligatori insieme. Le parti dell’ora omesse valgono 0. |
hour … millisecond | numero, facoltativo | Ora del giorno. |
kind | DateTimeKind, facoltativo | Local (predefinito) o Utc. |
text | string | Data e ora come testo. |
format | string, facoltativo | Formato .NET di text, per esempio "dd.MM.yyyy HH:mm". |
milliseconds | numero | Millisecondi dall'1.1.0001 — la scala della proprietà TICKS, non il tempo Unix. |
Note
- Un testo senza formato viene letto secondo le impostazioni della lingua dell’unità di controllo. Usa ISO 8601 (
"2026-01-15T08:30:00") oppure indica un formato, così il risultato non dipende da esse. - Un testo con uno scostamento o con
Z("2026-01-15T08:30:00Z") viene mantenuto come valore UTC. Conkindimpostato aUtc, un testo senza informazioni sul fuso orario viene letto come UTC. - Per il tempo Unix imposta la proprietà UNIXTIME.
Esempio
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 restituisce un nuovo datetime spostato del numero indicato di anni, mesi, giorni, ore, minuti, secondi e millisecondi; i numeri negativi lo spostano indietro.
| |
Note — Il valore originale non cambia. Aggiungere un mese al 31 gennaio dà l’ultimo giorno di febbraio. Per aggiungere un intervallo puoi usare anche + con un timespan o con un numero di millisecondi.
Esempio
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 crea un valore timespan — una durata — dai millisecondi oppure da giorni, ore, minuti, secondi e millisecondi.
| |
Proprietà (sola lettura)
| Proprietà | Significato |
|---|---|
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDS | Una componente della durata (HOURS va da 0 a 23). |
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDS | L’intera durata in quell’unità, con la parte frazionaria. |
Note
- Esistono solo le forme con 1 e con 5 argomenti; da 2 a 4 argomenti interrompono lo script.
timespan ± timespandà untimespan,datetime ± timespanundatetime.- La sottrazione di due valori
datetimenon è definita. Per il tempo tra due date sottrai i loroTICKS(millisecondi). - La dichiarazione di una variabile con la parola chiave di tipo
timespanrichiede il Core 2023.2 o più recente.
Esempio
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)Errori — TIMESPAN Unsupported number of parameters; Operator ‘-’ not defined for ‘DateTime’ and ‘DateTime’.
LOCALTIMEZONE
LOCALTIMEZONE restituisce in millisecondi lo scostamento attuale del fuso orario dell’unità di controllo rispetto a UTC, compresa l’ora legale.
| |
Esempio
LOCALTIMEZONE() / 3600000;
# Result: 1 in Central European winter time, 2 in summer timeProprietà dei valori datetime
Un valore datetime ha queste proprietà. Leggile da una variabile, non dalla chiamata di una funzione.
| Proprietà | Lettura | Scrittura | Nota |
|---|---|---|---|
TICKS | ✓ | ✓ | Millisecondi dall'1.1.0001. |
YEAR, MONTH, DAY | ✓ | ✓ | La scrittura controlla l’intervallo (MONTH 1 – 12, DAY 1 – ultimo giorno del mese). |
HOUR, MINUTE, SECOND, MILLISECOND | ✓ | ✓ | Intervalli 0 – 23, 0 – 59, 0 – 59, 0 – 999. |
DAYOFWEEK | ✓ | Valore DayOfWeek (Monday … Sunday). | |
DAYOFYEAR | ✓ | 1 – 366. | |
KIND | ✓ | ✓ | DateTimeKind: Local, Utc o Unspecified. |
UTCDATETIME, LOCALDATETIME | ✓ | Lo stesso istante convertito con il fuso orario dell’unità di controllo. | |
UNIXTIME | ✓ | ✓ | Secondi dall'1.1.1970 UTC. Scrivendola si memorizza un valore UTC. |
Note
- Fuori dall’argomento di una funzione un valore enum si scrive con il suo tipo:
DayOfWeek.Saturday. UnSaturdayda solo è una variabile sconosciuta. <,>e=confrontano due valoridatetimecome istanti nel tempo, quindi i valori conKINDdiverso vengono confrontati correttamente.- La scrittura di un valore fuori dall’intervallo interrompe lo script, per esempio Value must between 0-23.
- Senza formato, TOSTRING stampa un
datetimecomeyyyy/MM/dd hh:mm:ss.fff— un orologio a 12 ore senza AM o PM. Indica un formato come"yyyy-MM-dd HH:mm".
Esempio — nessuna azione nel fine settimana
VAR now := NOW();
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
RETURN(0);
END
1;Esempio — data da un timestamp Unix
datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)Vedi anche — Stringhe di formato, Tipi di dati.