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