Google Sheets-Kochbuch: Rechnen mit Kalenderdaten
Um mit Kalenderdaten zu rechnen, gibt es eine ganze Reihe von Funktionen. Es ist dabei sinnvoll zu wissen, wie das Kalenderdatum intern gespeichert und verarbeitet wird.
Kalenderdaten in Google Sheets rechnen mit Tagen seit dem 30.12.1899. Dabei ist der 30.12.1899 Tag 0, der 01.01.1900 Tag 2 usw. Nachkommastellen werden als Uhrzeit interpretiert.
In MS-Excel ist das zwar im Prinzip gleich, allerdings zählt Excel den 01.01.1990 als Tag 1. Die Abweichung besteht aber nur bis zum 01.03.1900. Excel benutzt aus historischen Gründen (falsch) das Jahr 1900 als Schaltjahr mit 29 Tagen, das Jahr 1900 war aber kein Schaltjahr. Damit zählen beide Programme den 01.03.1900 als Tag 61.
Datum und Datumswert
[Bearbeiten]Mit der Funktion DATEVALUE() können Sie den jeweiligen Datumswert berechnen.
=DATEVALUE("2024-07-30")
- ergibt die Zahl 45503, d.h. es ist der 45503. Tag seit dem 30.12.1899.
- Das Datum muss dabei in einem kompatiblen Format angegeben werden, das ist von den Länder- und Spracheinstellungen abhängig.
Umgekehrt berechnet die Funktion TO_DATE() aus einer Zahl ein Datum.
=TO_DATE(45503)
- gibt das Datum 30.07.2024.
- Das ausgebene Format ist von den Länder- und Spracheinstellungen abhängig.
Formatierung von Daten
[Bearbeiten]Um ein bestimmtes Ausgabeformat zu erzwingen, was z.B. bei der QUERY-Funktion notwendig ist oder wenn wir einfach ein bestimmtes Format anzeigen wollen, verwendet man die TEXT-Funktion.
=TEXT(DATEVALUE("30.07.2024");"yyyy-mm-dd")
- erzeugt die Ausgabe
2024-07-30
- Das ist das Format, das in der QUERY-Funktion benötigt wird.
- erzeugt die Ausgabe
Code | Beschreibung | Ergebnis |
---|---|---|
M |
Monatsnummer ohne führende Null. | 8 |
MM |
Monatsnummer mit führender Null. | 08 |
MMM |
Abkürzung des Monats mit vier Buchstaben. Hat der Monat nur vier Buchstaben, wird er nicht abgeürzt. | Aug. |
MMMM |
Vollständiger Monatsname | August |
MMMMM |
Erster Buchstabe des Monats. | A |
D |
Tag des Monats ohne führende Null. | 6 |
DD |
Tag des Monats mit führender Null. | 06 |
DDD |
Abkürzung des Tages mit drei Buchstaben. | Di. |
DDDD |
Vollständiger Tag | Dienstag |
=LEFT(TEXT(DATEVALUE("06.08.2024");"DDDD")) |
Um andere Formate herzustellen, verwendet man die verschiedenen Textfunktionen. | D |
YY |
zweistelliges Jahr | 24 |
YYYY |
vierstelliges Jahr | 2024 |
Zeichen die nicht als Token verwendet werden sind Literale, werden also so ausgegeben, wie sie im Formatstring vorkommen.
Alle Formatierungstoken findet man im Handbuch: Datum & Zeitformatmuster
Rechnen mit Tagen
[Bearbeiten]Da das Datum als fortlaufende Zahl gespeichert wird, ist das Rechnen mit Kalenderdaten recht intuitiv möglich.
Wann ist heute, gestern, morgen?
[Bearbeiten]=TODAY()
- Das tagesaktuelle Datum. Es wird jedesmal aktualisiert, wenn die Tabelle neu berechnet wird.
- Brauchen Sie auch die Uhrzeit, verwenden Sie die Funktion
=NOW()
=TODAY()-1
- Gestern.
=TODAY()+1
- Morgen.
Tage bis/von
[Bearbeiten]Sie können die Funktion =DAYS(Enddatum;Startdatum)
verwenden, oder die Daten einfach voneinander abziehen.
An welchem Wochentag war ...
[Bearbeiten]... mein Geburts-/Jahres-/sonstiger Tag
=TEXT(WEEKDAY(Datum);"DDDD")
- Die Funktion WEEKDAY() gibt die Tagesnummer als Zahl aus. WEEKDAY zählt ohne Parameter den Sonntag als Tag 1.
- Die TEXT() Funktion zählt genauso, interpretiert die 1 als Sonntag.
An welchem Datum ist der n-te Tag des Monat?
[Bearbeiten]An welchem Datum liegt der dritte Freitag im Mai 2024?
=LET(_date;"01.05.2024";_day;6;_n;3;
IF(WEEKDAY(_date)>_day;_n*7+_day-WEEKDAY(_date)+1;(_n-1)*7+_day-WEEKDAY(_date)+1)
)
Das lässt sich genausogut als LAMBDA-Funktion schreiben, wobei die Parameter am Ende übergeben werden.
=LAMBDA(_date;_day;_n;
IF(WEEKDAY(_date)>_day;_n*7+_day-WEEKDAY(_date)+1;(_n-1)*7+_day-WEEKDAY(_date)+1)
)("01.05.2024";6;3)- Dabei ist _date = der erste Tag des Monats als Kalenderdatum, _day eine Zahl zwischen 1 (für Sonntag) und 7 (für Samstag) und _n die n-te Anzahl.
- Die eigentliche Berechnung beginnt hinter dem IF. Wenn der gesuchte Wochentag vor dem ersten Tag des Monats liegt addieren wir n*7 Tage zum ersten Auftreten des Wochentages im Monat hinzu.
- Um die obige Frage zu beantworten: _date = 01.05.2024, _day = 6, _n = 3
- Das Ergebnis ist der 17.
- Die Funktion ist nicht gegen Eingabefehler geschützt.
- Liegt das Ergebnis im Folgemonat erfolgt keine Fehlermeldung, das werden wir gleich beheben.
Wir wollen das ganze Datum und nicht nur den Kalendertag. Außerdem soll eine Fehlermeldung ausgegeben werden, wenn der Tag im Folgemonat liegt:
=LAMBDA(_date;_day;_n;
LET(_result;DATE(YEAR(_date);MONTH(_date);IF(WEEKDAY(_date)>_day;_n*7+_day-WEEKDAY(_date)+1;(_n-1)*7+_day-WEEKDAY(_date)+1));
IF(MONTH(_result)=MONTH(_date);_result;"Es gibt keinen " &_n & ". Tag in diesem Monat.")
)
)("01.05.2024";6;3)- Auch hier ist die Funktion nicht gegen Eingabefehler geschützt.
Die LAMBDA-Funktion könnten wir jetzt zu einer benannten Funktion machen.
Arbeitstage
[Bearbeiten]WORKDAY.INTL()
- DATE()
- TO_DATE()
- DATEVALUE
- WEEKDAY()
Kalenderdaten rechnen mit Tagen seit dem 30.12.1899. ... tbd ...
Die Beispiele auf dieser Seite wurden getestet: 08/2024