---
title: "Datum und Uhrzeit"
description: "Datum und Uhrzeit in TapHome-Skripten: aktuelle Zeit mit NOW, Datum erstellen mit DATETIME, Tage oder Stunden addieren, Zeitdauern mit TIMESPAN, Zeitzonenversatz und Unix-Zeit."
url: "https://taphome.com/de/docs/script/date-and-time/"
language: de
lastmod: 2026-11-06
generator: hugo
ai:
  topics: ["date-time","timespan","timezone","scripting-language"]
  questions: ["Wie arbeite ich in TapHome-Skripten mit Datum und Uhrzeit?","Wie erstelle ich in TapHome einen DateTime-Wert?","Wie erhalte ich in einem TapHome-Skript das aktuelle Datum und die aktuelle Uhrzeit?","Wie stelle ich mit TIMESPAN eine Zeitdauer dar?","Wie addiere oder subtrahiere ich mit DATETIMEADD Zeit zu einem DateTime-Wert?","Wie erhalte ich in TapHome den Versatz der lokalen Zeitzone?","Welche Eigenschaften hat ein DateTime-Wert?","Wie prüfe ich in einem Skript, ob heute Wochenende ist?","Wie wandle ich in einem TapHome-Skript einen Unix-Zeitstempel in ein Datum um?","Wie berechne ich die Anzahl der Minuten zwischen zwei Daten?"]
---

# Datum und Uhrzeit

Funktionen der TapHome-Skripte für Datum und Uhrzeit — NOW, DATETIME, DATETIMEADD, TIMESPAN und LOCALTIMEZONE — und die Eigenschaften von Werten datetime und timespan.

Zuletzt aktualisiert: 2026-11-06

Funktionen für Datum und Uhrzeit erzeugen Werte `datetime` (ein Zeitpunkt) und `timespan` (eine Zeitdauer). Sie funktionieren in jedem Skript — smart rules, Benachrichtigungen, Modbus und Packet Parser — und verwenden die Zeitzone der Steuereinheit. Alle Funktionen auf dieser Seite benötigen Core 2022.2 oder neuer.

## NOW

`NOW` gibt das aktuelle Datum und die aktuelle Uhrzeit der Steuereinheit als Wert `datetime` zurück — standardmäßig in Ortszeit, mit `NOW(Utc)` in UTC.

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

| Name | Typ | Beschreibung |
|---|---|---|
| `kind` | `DateTimeKind`, optional | `Local` (Standard) oder `Utc`. `NOW(DateTimeKind.Utc)` ist dasselbe wie `NOW(Utc)`. |

**Hinweise** — Eine Eigenschaft lässt sich nicht direkt aus einem Funktionsaufruf lesen: `NOW().HOUR` wird beim Speichern des Skripts abgelehnt. Speichern Sie den Wert zuerst in einer Variablen.

**Beispiel**

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

**Siehe auch** — [DATETIME](https://taphome.com/de/docs/script/date-and-time/#datetime), [Eigenschaften von Werten datetime](https://taphome.com/de/docs/script/date-and-time/#datetime-properties).

## DATETIME

`DATETIME` erstellt einen Wert `datetime` aus seinen Teilen, aus Text oder aus einer Anzahl Millisekunden; ohne Argumente aufgerufen gibt es 1.1.0001 00:00 zurück, nicht die aktuelle Zeit — dafür verwenden Sie [NOW](https://taphome.com/de/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()
```

| Name | Typ | Beschreibung |
|---|---|---|
| `year`, `month`, `day` | Zahl | Nur gemeinsam anzugeben. Weggelassene Zeitteile sind 0. |
| `hour` … `millisecond` | Zahl, optional | Uhrzeit. |
| `kind` | `DateTimeKind`, optional | `Local` (Standard) oder `Utc`. |
| `text` | string | Datum und Uhrzeit als Text. |
| `format` | string, optional | .NET-Format von `text`, zum Beispiel `"dd.MM.yyyy HH:mm"`. |
| `milliseconds` | Zahl | Millisekunden seit 1.1.0001 — die Skala der Eigenschaft `TICKS`, keine Unix-Zeit. |

**Hinweise**

- Text ohne Format wird nach den Spracheinstellungen der Steuereinheit gelesen. Verwenden Sie ISO 8601 (`"2026-01-15T08:30:00"`) oder geben Sie ein Format an, damit das Ergebnis nicht von ihnen abhängt.
- Text mit einem Versatz oder `Z` (`"2026-01-15T08:30:00Z"`) bleibt ein Wert in UTC. Ist `kind` auf `Utc` gesetzt, wird Text ohne Zoneninformation als UTC gelesen.
- Für Unix-Zeit setzen Sie die [Eigenschaft UNIXTIME](https://taphome.com/de/docs/script/date-and-time/#datetime-properties).

**Beispiel**

```taphome
# Datum aus Teilen: Jahr, Monat, Tag, Uhrzeit
VAR start := DATETIME(2026, 1, 15, 8, 30, 0);
# Datum aus ISO-8601-Text und aus Text mit Format
VAR iso := DATETIME("2026-01-15T08:30:00");
VAR custom := DATETIME("15.01.2026 08:30", "dd.MM.yyyy HH:mm");
# Datum aus Teilen, als UTC markiert
VAR utc := DATETIME(2026, 1, 15, 8, 30, 0, 0, DateTimeKind.Utc);
# Minute des eingelesenen Datums
custom.MINUTE;
# Result: 30
```

## DATETIMEADD

`DATETIMEADD` gibt einen neuen Wert `datetime` zurück, verschoben um die angegebene Anzahl Jahre, Monate, Tage, Stunden, Minuten, Sekunden und Millisekunden; negative Zahlen verschieben ihn zurück.

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

**Hinweise** — Der ursprüngliche Wert ändert sich nicht. Ein Monat zum 31. Januar addiert ergibt den letzten Tag des Februars. Um ein Intervall zu addieren, können Sie auch `+` mit einem [timespan](https://taphome.com/de/docs/script/date-and-time/#timespan) oder mit einer Anzahl Millisekunden verwenden.

**Beispiel**

```taphome
# aktuelle Zeit der Steuereinheit
VAR now := NOW();
# einen Tag vor, zwei Stunden zurück
VAR tomorrow := DATETIMEADD(now, 0, 0, 1);
VAR twoHoursAgo := DATETIMEADD(now, 0, 0, 0, -2);
# ein Monat nach dem 31. Januar
VAR endOfFebruary := DATETIMEADD(DATETIME(2026, 1, 31), 0, 1);
# Tag des Ergebnisses
endOfFebruary.DAY;
# Result: 28
```

## TIMESPAN

`TIMESPAN` erstellt einen Wert `timespan` — eine Zeitdauer — entweder aus Millisekunden oder aus Tagen, Stunden, Minuten, Sekunden und Millisekunden.

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

**Eigenschaften** (nur lesbar)

| Eigenschaft | Bedeutung |
|---|---|
| `DAYS`, `HOURS`, `MINUTES`, `SECONDS`, `MILLISECONDS` | Ein Bestandteil der Zeitdauer (`HOURS` ist 0 – 23). |
| `TOTALDAYS`, `TOTALHOURS`, `TOTALMINUTES`, `TOTALSECONDS`, `TOTALMILLISECONDS` | Die ganze Zeitdauer in dieser Einheit, mit Nachkommastellen. |

**Hinweise**

- Es gibt nur die Formen mit 1 und mit 5 Argumenten; 2 bis 4 Argumente brechen das Skript ab.
- `timespan ± timespan` ergibt einen `timespan`, `datetime ± timespan` einen `datetime`.
- Die Subtraktion zweier Werte `datetime` ist nicht definiert. Für die Zeit zwischen zwei Daten subtrahieren Sie ihre `TICKS` (Millisekunden).
- Die Deklaration einer Variablen mit dem Typ-Schlüsselwort `timespan` benötigt Core 2023.2 oder neuer.

**Beispiel**

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

**Fehler** — *TIMESPAN Unsupported number of parameters*; *Operator '-' not defined for 'DateTime' and 'DateTime'*.

## LOCALTIMEZONE

`LOCALTIMEZONE` gibt den aktuellen Versatz der Zeitzone der Steuereinheit gegenüber UTC in Millisekunden zurück, einschließlich Sommerzeit.

```text
LOCALTIMEZONE()
```

**Beispiel**

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

## Eigenschaften von Werten datetime

Ein Wert `datetime` hat diese Eigenschaften. Lesen Sie sie aus einer Variablen, nicht aus einem Funktionsaufruf.

| Eigenschaft | Lesen | Schreiben | Hinweis |
|---|---|---|---|
| `TICKS` | ✓ | ✓ | Millisekunden seit 1.1.0001. |
| `YEAR`, `MONTH`, `DAY` | ✓ | ✓ | Beim Schreiben wird der Bereich geprüft (`MONTH` 1 – 12, `DAY` 1 – letzter Tag des Monats). |
| `HOUR`, `MINUTE`, `SECOND`, `MILLISECOND` | ✓ | ✓ | Bereiche 0 – 23, 0 – 59, 0 – 59, 0 – 999. |
| `DAYOFWEEK` | ✓ | | Wert `DayOfWeek` (`Monday` … `Sunday`). |
| `DAYOFYEAR` | ✓ | | 1 – 366. |
| `KIND` | ✓ | ✓ | `DateTimeKind`: `Local`, `Utc` oder `Unspecified`. |
| `UTCDATETIME`, `LOCALDATETIME` | ✓ | | Derselbe Zeitpunkt, umgerechnet mit der Zeitzone der Steuereinheit. |
| `UNIXTIME` | ✓ | ✓ | Sekunden seit 1.1.1970 UTC. Beim Schreiben wird ein Wert in UTC gespeichert. |

**Hinweise**

- Außerhalb eines Funktionsarguments wird ein Aufzählungswert mit seinem Typ geschrieben: `DayOfWeek.Saturday`. Ein alleinstehendes `Saturday` ist eine unbekannte Variable.
- `<`, `>` und `=` vergleichen zwei Werte `datetime` als Zeitpunkte, daher werden auch Werte mit unterschiedlichem `KIND` korrekt verglichen.
- Das Schreiben eines Werts außerhalb des Bereichs bricht das Skript ab, zum Beispiel mit *Value must between 0-23*.
- Ohne Format gibt [TOSTRING](https://taphome.com/de/docs/script/data-type-conversions/#tostring) einen `datetime` als `yyyy/MM/dd hh:mm:ss.fff` aus — im 12-Stunden-Format ohne AM oder PM. Geben Sie ein Format wie `"yyyy-MM-dd HH:mm"` an.

**Beispiel — keine Aktion am Wochenende**

```taphome
# aktuelle Zeit der Steuereinheit
VAR now := NOW();
# samstags und sonntags 0 zurückgeben
IF now.DAYOFWEEK = DayOfWeek.Saturday OR now.DAYOFWEEK = DayOfWeek.Sunday
    RETURN(0);
END
# an anderen Tagen 1 zurückgeben
1;
```

**Beispiel — Datum aus einem Unix-Zeitstempel**

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

**Siehe auch** — [Formatstrings](https://taphome.com/de/docs/script/data-type-conversions/#format-strings), [Datentypen](https://taphome.com/de/docs/script/data-types/).
