---
title: "Data e ora"
description: "Data e ora negli script TapHome: ora attuale con NOW, costruire date con DATETIME, aggiungere giorni o ore, durate con TIMESPAN, scostamento del fuso orario e tempo Unix."
url: "https://taphome.com/it/docs/script/date-and-time/"
language: it
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["date-time","timespan","timezone","scripting-language"]
  questions: ["Come si lavora con data e ora negli script TapHome?","Come si crea un oggetto DateTime in TapHome?","Come si ottengono la data e l'ora attuali in uno script TapHome?","Come si rappresenta una durata con TIMESPAN?","Come si aggiunge o si sottrae tempo da un DateTime con DATETIMEADD?","Come si ottiene lo scostamento del fuso orario locale in TapHome?","Quali proprietà ha un oggetto DateTime?","Come verifico in uno script se oggi è fine settimana?","Come si converte un timestamp Unix in una data in uno script TapHome?","Come si calcola il numero di minuti tra due date?"]
---

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

Ultimo aggiornamento: 2026-11-06

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

```text
NOW()
NOW(kind)
```

| 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**

```taphome
VAR now := NOW();
now.HOUR;
# Result: the current hour, 0 to 23
```

**Vedi anche** — [DATETIME](https://taphome.com/it/docs/script/date-and-time/#datetime), [Proprietà dei valori datetime](https://taphome.com/it/docs/script/date-and-time/#datetime-properties).

## 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](https://taphome.com/it/docs/script/date-and-time/#now).

```text
DATETIME(year, month, day [, hour [, minute [, second [, millisecond [, kind]]]]])
DATETIME(text [, format])
DATETIME(text, kind)
DATETIME(milliseconds [, kind])
DATETIME()
```

| 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. Con `kind` impostato a `Utc`, un testo senza informazioni sul fuso orario viene letto come UTC.
- Per il tempo Unix imposta la [proprietà UNIXTIME](https://taphome.com/it/docs/script/date-and-time/#datetime-properties).

**Esempio**

```taphome
# data da parti: anno, mese, giorno, ora
VAR start := DATETIME(2026, 1, 15, 8, 30, 0);
# data da testo ISO 8601 e da testo con formato
VAR iso := DATETIME("2026-01-15T08:30:00");
VAR custom := DATETIME("15.01.2026 08:30", "dd.MM.yyyy HH:mm");
# data da parti, contrassegnata come UTC
VAR utc := DATETIME(2026, 1, 15, 8, 30, 0, 0, DateTimeKind.Utc);
# minuto della data interpretata
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.

```text
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](https://taphome.com/it/docs/script/date-and-time/#timespan) o con un numero di millisecondi.

**Esempio**

```taphome
# ora attuale dell'unità di controllo
VAR now := NOW();
# un giorno avanti, due ore indietro
VAR tomorrow := DATETIMEADD(now, 0, 0, 1);
VAR twoHoursAgo := DATETIMEADD(now, 0, 0, 0, -2);
# un mese dopo il 31 gennaio
VAR endOfFebruary := DATETIMEADD(DATETIME(2026, 1, 31), 0, 1);
# giorno del risultato
endOfFebruary.DAY;
# Result: 28
```

## TIMESPAN

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

```text
TIMESPAN(milliseconds)
TIMESPAN(days, hours, minutes, seconds, milliseconds)
```

**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 ± 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 Core 2023.2 o più recente.

**Esempio**

```taphome
VAR t := TIMESPAN(1, 2, 3, 4, 0);
t.TOTALSECONDS;
# Result: 93784
```

```taphome
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.

```text
LOCALTIMEZONE()
```

**Esempio**

```taphome
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à | 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`. 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](https://taphome.com/it/docs/script/data-type-conversions/#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**

```taphome
# ora attuale dell'unità di controllo
VAR now := NOW();
# sabato e domenica restituisci 0
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
    RETURN(0);
END
# negli altri giorni restituisci 1
1;
```

**Esempio — data da un timestamp Unix**

```taphome
datetime d;
d.UNIXTIME := 1767225600;
d.YEAR;
# Result: 2026 (1 January 2026, 00:00 UTC)
```

**Vedi anche** — [Stringhe di formato](https://taphome.com/it/docs/script/data-type-conversions/#format-strings), [Tipi di dati](https://taphome.com/it/docs/script/data-types/).
