TapHome

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

1
2
NOW()
NOW(kind)
NomeTipoDescrizione
kindDateTimeKind, facoltativoLocal (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 23

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

1
2
3
4
5
DATETIME(year, month, day [, hour [, minute [, second [, millisecond [, kind]]]]])
DATETIME(text [, format])
DATETIME(text, kind)
DATETIME(milliseconds [, kind])
DATETIME()
NomeTipoDescrizione
year, month, daynumeroObbligatori insieme. Le parti dell’ora omesse valgono 0.
hour … millisecondnumero, facoltativoOra del giorno.
kindDateTimeKind, facoltativoLocal (predefinito) o Utc.
textstringData e ora come testo.
formatstring, facoltativoFormato .NET di text, per esempio "dd.MM.yyyy HH:mm".
millisecondsnumeroMillisecondi 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. Con kind impostato a Utc, 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: 30

DATETIMEADD

DATETIMEADD restituisce un nuovo datetime spostato del numero indicato di anni, mesi, giorni, ore, minuti, secondi e millisecondi; i numeri negativi lo spostano indietro.

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

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

TIMESPAN

TIMESPAN crea un valore timespan — una durata — dai millisecondi oppure da giorni, ore, minuti, secondi e millisecondi.

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

Proprietà (sola lettura)

ProprietàSignificato
DAYS, HOURS, MINUTES, SECONDS, MILLISECONDSUna componente della durata (HOURS va da 0 a 23).
TOTALDAYS, TOTALHOURS, TOTALMINUTES, TOTALSECONDS, TOTALMILLISECONDSL’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 ± timespan dà un timespan, datetime ± timespan un datetime.
  • La sottrazione di due valori datetime non è definita. Per il tempo tra due date sottrai i loro TICKS (millisecondi).
  • La dichiarazione di una variabile con la parola chiave di tipo timespan richiede il Core 2023.2 o più recente.

Esempio

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)

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.

1
LOCALTIMEZONE()

Esempio

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

Proprietà dei valori datetime

Un valore datetime ha queste proprietà. Leggile da una variabile, non dalla chiamata di una funzione.

ProprietàLetturaScritturaNota
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. Un Saturday da solo è una variabile sconosciuta.
  • <, > e = confrontano due valori datetime come istanti nel tempo, quindi i valori con KIND diverso 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 datetime come yyyy/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.