prevnext   » Startseite » Haupt-Referenz » Generelle Informationen » Zeitangaben

Zeitangaben

Alle unten aufgelisteten Zeitfunktionen erwarten als ersten Parameter eine Zeitangabe. Je nach Typ wird diese Zeitangabe wie folgt interpretiert:

Das Unix-Zeitformat

Zuätzlich wird noch das Unix-Zeitformat (Angabe der Sekunden, die seit dem 1. Januar 1970 vergangen sind) unterstützt. Hierzu existieren die drei Funktionen unix2time(), unix2date und unixTime().

Auswertung von Textuellen Zeitangaben

Für das Einlesen einer Zeitangabe wird solange die Quellzeichenkette ausgewertet, bis ein Quellzeichen nicht mehr interpretiert werden kann.

Zuerst wird untersucht, ob die Zeitangabe mit einem Vorzeichen ('+' oder '-') beginnt, wobei führende Leerzeichen und TABs ignoriert werden. Ist dieses der Fall, dann handelt es sich um eine relative Zeitangabe. Die relative Zeitangabe wird relativ zur angegeben Basis oder ersatzweise zur aktuellen Zeit addiert um eine absolute Zeit zu erhalten.

Andernfalls handelt es sich eine absolute Zeitangabe. Dieser absoluten Zeitangabe kann auch noch eine relative Zeitangabe folgen, die dann zur absoluten Zeit addiert wird.

Syntaxbeschreibung
 
ZEIT := ABSOULT | RELATIV | ABSOLUT RELATIV
ABSOLUT := FAKTOR | DATUM | ZEIT | DATUM ZEIT | DATUM ZEIT JAHR
FAKTOR := [blanks] { s | S | m | M | h | H } ziffern
DATUM := [blanks] wochentag | [blanks] [wochentag] [blanks] DATUM1
DATUM1 := reltag | NUMMER | ZIFFERN6 | ZIFFERN8 | DATUM2
DATUM2 := MT | MTJ | TM | TMJ | JMT
 
MT := monat | monat TAG31 ['.']
MTJ := monat TAG31 ['.'] JAHR
TM := TAG1 '.' MONAT1 ['.'] | TAG31 ['-'] [MONAT1] ['-']
TMJ := TAG1 '.' MONAT1 ['.'] JAHR | TAG31 ['-'] [MONAT1] ['-'] JAHR
JMT := JAHR ['-'] MONAT1 ['-'] TAG2
 
NUMMER := JAHR4 MONAT2 TAG2 ZEIT (Format: 'yyyymmddHHMMSS)'
ZIFFERN6 := TAG31 MONAT2 JAHR2 | JAHR1 MONAT2 TAG2 ([d]dmmyy|[y]ymmdd)
ZIFFERN8 := TAG31 MONAT2 JAHR4 | JAHR3 MONAT2 TAG2 ([d]dmmyyyy|[y]yyymmdd)
 
TAG1 := digit [digit]
TAG2 := digit digit
TAG31 := digit [digit] (Zahl aus dem Bereich 1..31)
MONAT1 := monat | ziffer [ziffer]
MONAT2 := ziffer ziffer
JAHR := digits [ 'BC' | 'AD' ]
JAHR1 := ziffer [ziffer]
JAHR2 := ziffer ziffer
JAHR3 := ziffer ziffer ziffer [ziffer]
JAHR4 := ziffer ziffer ziffer ziffer
 
ZEIT := { HMS1 | HMS2 | SEKUNDEN | ZEIT6 | ZEIT4 } [ 'AM' | 'PM' ]
HMS1 := ziffern [ ':' ziffern [ ':' SEKUNDEN ]] (hh:mm:ss.s)
HMS2 := ziffern [ '-' ziffern [ '-' SEKUNDEN ]] (hh-mm-ss.s)
ZEIT6 := ziffern (5 oder 6 Ziffern, Format '[h]hmmss')
ZEIT4 := ziffern (3 oder 4 Ziffern, Format '[h]hmm')
SEKUNDEN := ziffern '.' HINTERKOMMA
HINTERKOMMA := ziffern (1 bis 9 Ziffern)
 
RELATIV := INTERVALL | ZEIT | TAGE
TAGE := ziffern [ blank ZEIT ]
 
INTERVALL := [I_WOCHE] [I_TAG] [I_STUNDE] [I_MIN] [I_SEK] [I_MSEK] [I_USEK] [I_NSEK]
I_WOCHE := dezimalbruch { 'w' | 'W' } (Anzahl Wochen)
I_TAG := dezimalbruch { 'd' | 'D' } (Anzahl Tage)
I_STUNDE := dezimalbruch { 'h' | 'H' } (Anzahl Stunden)
I_MIN := dezimalbruch { 'm' | 'M' } (Anzahl Minuten)
I_SEK := dezimalbruch { 's' | 'S' } (Anzahl Sekunden)
I_MSEK := dezimalbruch { 'i' | 'I' } (Anzahl Millisekunden)
I_USEK := dezimalbruch { 'u' | 'U' } (Anzahl Microsekunden)
I_NSEK := dezimalbruch { 'n' | 'N' } (Anzahl Nanosekunden)
 
reltag := 'gestern' | 'heute' | 'morgen' | 'yesterday' | 'today' | 'tomorrow'
wochentag := 'montag' | ... | 'sonntag' | 'monday' | ... | 'sunday'
monat := 'januar' | ... | 'dezember' | 'january' | ... | 'december'
dezimalbruch := ziffern [ '.' [ziffern]]
ziffern := ziffer [ziffern]
ziffer := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
blanks := blank [blanks]
blank := leerzeichen | tabulator

Anmerkungen:

Beispiele
Basiszeit: '2009-08-07 06:05:04.321' (Freitag)
Zeitangabe Ergebnis Kommentar
2009-08-07 06:05:04.321 Ohne Text ergibt sich die Basiszeit
1 2009-08-01 00:00:00.000 Der 1. des Monats
24 2009-08-24 00:00:00.000 Der 24. des Monats
42 0042-01-01 00:00:00.000 Den 42. des Monats gibt es nicht, daher das Jahr 42
1998 1998-01-01 00:00:00.000 Das Jahr 1998, und zwar der 1. Januar
10203 2003-02-01 00:00:00.000 Datum im Format dmmyy
010203 2003-02-01 00:00:00.000 Datum im Format ddmmyy
800102 2080-01-02 00:00:00.000 Den 80. des Monats gibt es nicht, daher Datum im Format yymmdd
04032000 2000-03-04 00:00:00.000 Datum im Format ddmmyyyy
20130304 2013-03-04 00:00:00.000 Da '20.13.0304' keine Sinn gibt: Datum im Format yyyymmdd
201303040506 2013-03-04 05:06:00.000 Datum+Zeit im Format yyyymmddHHMM
20130304050607.89 2013-03-04 14:03:27.890 Datum+Zeit im Format yyyymmddHHMMSS.ss
 
2013-03-04 05:06:07.89 2013-03-04 05:06:07.890 Datum+Zeit im ISO-Format, unverwechselbar
2001-03-32 2001-04-01 00:00:00.000 32. März wird als 1. April interpretiert.
2001-02-30 2001-03-02 00:00:00.000 30. Februar wird als 2. März interpretiert ...
2000-02-30 2000-03-01 00:00:00.000 ... oder in Schaltjahren als 1. März.
 
13 Sep 12:30 1999 2012-09-14 06:00:00.000 Englische Zeitangaben werden auch erkannt.
Sep 13 12:30 1999 2012-09-14 06:00:00.000 Insbesondere hilft die Angabe der Monatsnamen.
Sep 2001 2001-09-01 00:00:00.000 Auch solche Eingaben werden erkannt.
 
heute 2009-08-07 00:00:00.000 Die Angabe erfolgt relativ zur Basiszeit
heute 12:34 2009-08-07 12:34:00.000 Tagesangabe mit absoluter Zeitangabe ...
heute+12:34 2009-08-07 12:34:00.000 ... ist das gleiche wie Tagesangabe mit relativer Zeitangabe
morgen-1d 2009-08-07 00:00:00.000 Das gleiche wie heute
donnerstag 2009-08-13 00:00:00.000 der nächste Donnerstag 0 Uhr, der nicht in der Vergangenheit liegt.
freitag 2009-08-14 00:00:00.000 Basiszeit ist ein Freitag, also nächsten Freitag
samstag 2009-08-08 00:00:00.000 Da Freitag ist: das gleiche wie morgen
samstag 2009-08-07 2009-08-07 00:00:00.000 Bei Angabe eines Datums wird der Wochentag ignoriert.
 
morgen 2009-08-08 00:00:00.000 Morgen 0 Uhr (relativ zur Basiszeit)
+1d 2009-08-08 06:05:04.321 Morgen mit jetziger Uhrzeit
+1.5d 2009-08-07 06:05:05.821 1.5 Tage (36 Stunden) weiter
+1w1d 2009-08-15 06:05:04.321 1 Woche und 1 Tag weiter (8 Tage weiter)
-90m 2009-08-07 04:35:04.321 Vor 90 Minuten (relativ zur Basiszeit)
-1h30m 2009-08-07 04:35:04.321 Vor 1 Stunde und 30 Minuten ( == vor 90 Minuten )
2001+200d 2001-07-20 00:00:00.000 Der 200-ste Tag nach dem 1.1.2001; also der 201.ste Tag des Jahres 2001
+36h 2009-08-08 18:05:04.321 36 Stunden weiter
heute+7201s 2009-08-07 02:00:01.000 Wann waren heute 7201 Sekunden vergangen ?

Funktions-Refrenz