DateTime-Klassen

Die DateTime-Klasse und ihre umgebenden Hilfsklassen versuchen eine verbesserte Möglichkeit zur Datum- und Zeitverarbeitung zu bieten. An ihrer zusätzlichen Einführung ist zu erkennen, dass der Umgang mit Daten und Zeiten kein einfaches Thema für eine Programmiersprachen-API darstellt. Auch in anderen Programmiersprachen existieren in ihren APIs eine größere Anzahl an parallelen Möglichkeiten zur Zeitverwaltung. Die DateTime-Klasse kann dabei sowohl objektorientiert wie auch prozedual genutzt werden. Ein neues DateTime-Objekt kann wie folgt objektorientiert erstellt werden:

Zusätzlich ist zu sehen, wie die Exception abgefangen wird und mit getMessage() deren Fehlermeldung ausgelesen wird.

Prozedual wird das DateTime-Objekt wie folgt erstellt:

Zusätzlich könnte beiden Möglichkeiten das Objekt zu erzeugen ein Zeitzonenparameter übergeben werden. In dem Fall oben wird einfach die lokale Standardzeitzone genommen. Weiterhin ist es möglich, zu Beginn der Parameterliste einen $format-String wie bei der date()-Funktion zu übergeben, dem der nachfolgende Zeitstring folgen muss.

Die DateTime-Klasse besitzt eine Geschwisterklasse namens DateTimeImmuteable. Diese Geschwisterklasse zeichnet sich dadurch aus, dass nicht das Originalobjekt bei einer Änderung geändert wird, sondern ein neues DateTimeImmutable-Objekt erstellt wird. Natürlich existieren auch in ihr die Funktionen createFromFormat in DateTimeImmuteable und date_create_immutable_from_format, die statt der Standardobjekte die immuteable Objekte erstellen.

Möchte man ein DateTime-Objekt in einem String ausgeben, so wird dies mit der format()-Funktion bzw. im prozedualen Stil mit der date_format()-Funktion getan:

Beide Male wird 24-12-16 18:00 ausgegeben.

Um mehr Standardformate zu unterstützen, bringt die Klasse DateTime eine ganze Reihe von Konstanten mit, die als Format-Zeichenkette eingesetzt werden können. Unter ihnen ist beispielsweise das Cookie-Format mit DateTime::COOKIE, das Format für RSS-Feeds mit DateTime::RSS oder für Atom-Feeds DateTime::ATOM.

Mit der Funktion setDate() lässt sich ein neues Datum setzen, wobei nacheinander Jahr, Monat und Tag übergeben werden. Mit setTime() lässt sich eine Uhrzeit setzen, die aus Stunden, Minuten und Sekunden besteht, wobei die Sekundenangabe optional ist. Mit setTimestamp() lässt sich der darunterliegende Unix-Zeitstempel direkt setzen, während er mit getTimestamp() wieder ausgelesen wird.

Mit der Funktion add() bzw. mit der Funktion sub() kann eine Zeitspanne, die als DateInterval-Objekt ausgedrückt wird, zu einem DateTime-Objekt hinzuaddiert bzw. subtrahiert werden. Ebenso lässt sich mit Hilfe der Funktion diff() ein solches DateInterval aus zwei DateTime-Objekten generieren. Für die Erzeugung des DateTime-Objektes wird folgende Syntax verwendet, um die Zeitspanne zu deklarieren:

Der Zeitspanne wird ein P vorangestellt, um eine Periodendefinition einzuleiten. Beinhaltet diese Definition auch eine Zeitspanne, so wird diese mit T begonnen. Folgende Abstandsangaben sind erlaubt:

  • Y: Jahre
  • M: Monate
  • W: Wochen
  • D: Tage, ein Mischen mit Wochen ist nicht möglich
  • H: Stunden
  • M: Minuten
  • S: Sekunden

Für die Funktion diff() wird ein eigenes Format definiert. Hier muss vor jedem ausgegebenen Teil des Intervals ein Prozentzeichen (%) stehen. Folgende Zeichen sind nach diesem Prozentzeichen erlaubt:

  • y: Anzahl Jahre
  • Y: zweistellige Jahresangabe mit führender 0, wenn nötig.
  • m: Anzahl Monate
  • M: zweistellige Monatsangabe mit führender 0, wenn nötig.
  • d: Anzahl Tage
  • D: zweistellige Tagesangabe mit führender 0, wenn nötig.
  • a: vollständige Anzahl von Tagen zwischen den beiden Zeiten ohne Monate oder Jahre zu beachten
  • h: Anzahl Stunden
  • H: zweistellige Stundenanzahl mit führender 0, wenn nötig.
  • i: Anzahl Minuten
  • I: zweistellige Minutenanzahl mit führender 0, wenn nötig.
  • s: Anzahl Sekunden
  • S: zweistellige Sekundenanzahl mit führender 0, wenn nötig.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert